与上一篇的《SQL简单使用-基础篇》相连续的篇章,《SQL简单使用-基础篇》以下简称《基础篇》。在《基础篇》中,主要简单的带大家了解一下SQL命令中最主要的增删改查命令的使用,增INSERT INTO、删DETELE/DROP/TRUNCATE、改UPDATE、查SELECTE。因为增删改查是SQL命令的核心也是最基础的部分,所以本篇张还是围绕增删改查的使用进行进阶性的介绍与使用。 先从《基础篇》中提到的where子句里面的通配符讲起。 1.like 用于在where子句中搜索列中的指定模式
示例:
[AppleScript] 纯文本查看 复制代码 select * from websites where name like '%oo%';
注:(%分号表示任意数据,_表示任意一个数据,动手练两边就能熟悉)
'G%' 搜索以G开头的数据
'%G' 搜索以G结尾的数据
'%g%' 搜索包含g的数据
'G' 搜索以G开头的两位数据
'G' 搜索以G结尾的两位数据
'G' 搜索包含G的三位数据 1.1 通配符还有一种(%、_和[charlist])
示例:[charlist]使用
[AppleScript] 纯文本查看 复制代码 select * from websites where name REGEXP '^[A-H]'; 2.between 用于选取介于两个值之间的数据范围内的值
示例:
[AppleScript] 纯文本查看 复制代码 select * from websites where alexa between 1 and 20;
示例:添加not使用
[AppleScript] 纯文本查看 复制代码 select * from websites where alexa not between 1 and 20;
示例:结合IN使用
[AppleScript] 纯文本查看 复制代码 select * from websites where ( alexa BETWEEN 1 and 20) and country in ('USA','CN');
示例:文本
[AppleScript] 纯文本查看 复制代码 select * from websites where name between 'A' and 'H'; 不包含H 3.top 用于规定返回记录的数据,实用
示例:SQL server (SELECT TOP number|percent column_name(s) FROM table_name;)
[AppleScript] 纯文本查看 复制代码 select top 50 percent * from websites;
示例:Oracle(SELECT column_name(s) FROM table_name WHERE ROWNUM <= number;)
[AppleScript] 纯文本查看 复制代码 select * from websites where ROWNUM <5;
示例:MYSQL (SELECT column_name(s) FROM table_name LIMIT number;)
[AppleScript] 纯文本查看 复制代码 select * from websites limit 3; 4.IN 操作符允许在where子句中规定多个值
示例:查看表websites中name列的多条数据
[AppleScript] 纯文本查看 复制代码 select * from websites where name in('baidu','Google'); 5.别名 可以为表名称或列名称指定别名。
语法:列名称语法
SELECT column_name AS alias_name FROM table_name;
示例:
[AppleScript] 纯文本查看 复制代码 select name AS n,country AS c from websites;
语法:表名称语法
SELECT column_name(s) FROM table_name AS alias_name;
示例:
[AppleScript] 纯文本查看 复制代码 select w.name,w.url,a.count,a.date from websites AS w ,access_log AS a where w.id=a.site_id and w.name='菜鸟教程';
注:
1.在查询中涉及超过一个表
2.在查询中都是用了函数
3.列名称很长或者可读性差 都需要把两个列或者多个列结合在一起。 6.join 子句用于把来自两个表或者多个表的行结合起来,基于这些表之间的共同字段
join类型有一下几种:
INNER JOIN:如果表中有至少一个匹配,则返回行
LEFT JOIN:即使右表中没有匹配,也从左表返回所有的行
RIGHT JOIN:即使左表中没有匹配,也从右表返回所有的行
FULL JOIN:只要其中一个表中存在匹配,则返回行(MYSQL不支持) 首先,连接的结果可以在逻辑上看作是由SELECT语句指定的列组成的新表。
左连接与右连接的左右指的是以两张表中的哪一张为基准,它们都是外连接。
外连接就好像是为非基准表添加了一行全为空值的万能行,用来与基准表中找不到匹配的行进行匹配。假设两个没有空值的表进行左连接,左表是基准表,左表的所有行都出现在结果中,右表则可能因为无法与基准表匹配而出现是空值的字段。
来源:《数据库系统原理教程》,王珊,陈红编著,P86 示例: inner join [AppleScript] 纯文本查看 复制代码 SELECT
websites.id,
websites.NAME,
access_log.count,
access_log.date
FROM
websites
INNER JOIN access_log ON websites.id = access_log.site_id; 7.union 用于合并两个或多个select语句的结果集
语法:
SELECT column_name(s) FROM table1
UNION
SELECT column_name(s) FROM table2;
示例: union 去重 [AppleScript] 纯文本查看 复制代码 SELECT country FROM Websites
UNION
SELECT country FROM apps
ORDER BY country; 示例:union all 显示所有包括重复部分 [AppleScript] 纯文本查看 复制代码 select country from websites
union all
select country from apps; 示例:带有where的union all [AppleScript] 纯文本查看 复制代码 select country,name from websites where country='CN'
union all
select country,app_name from apps where country='CN' order by country; - into 从一个表复制数据,把数据插入到另一个新表中
注:MySQL 数据库不支持 SELECT ... INTO 语句,但支持 INSERT INTO ... SELECT 。
语法: 复制所有的列插入新表中
[AppleScript] 纯文本查看 复制代码 SELECT * INTO newtable [IN externaldb] FROM table1;
语法:只复制希望的列插入到新表中
[AppleScript] 纯文本查看 复制代码 SELECT column_name(s) INTO newtable [IN externaldb] FROM table1;
8.1 insert into select
示例:复制 "apps" 中的数据插入到 "Websites" 中:
[AppleScript] 纯文本查看 复制代码 INSERT INTO websites (name,country) select app_name,country from apps; - create 用于创建数据库或者数据表
语法:创建数据库
[AppleScript] 纯文本查看 复制代码 create database db_name;
语法:创建数据表[AppleScript] 纯文本查看 复制代码 create table table_name
(
column_name1 data_type(size),
column_name2 data_type(size),
column_name3 data_type(size),
... ...
); date_type 数据类型,size参数规定表中列的最大长度
示例:创建名称为runoob的数据库
[AppleScript] 纯文本查看 复制代码 create database runoob;
示例:创一个student_informaton表,包含五列:student_id,student_name,student_class,student_tele,student_add [AppleScript] 纯文本查看 复制代码 create table student_infomation
(
student_id int(10),
student_name char(4),
student_class char(10),
student_tele int(11),
student_add varchar(255)
); 前面是列名,后面跟的是对于列名的数据类型 10.约束 用于规定表中的数据规则
约束可以在创建表的时候通过create table语句规定,或者在表创建之后通过alter table语句规定
语法:crate table + constraint [AppleScript] 纯文本查看 复制代码 create table table_name
(
column_name1 type_data(size) constraint,
column_name2 type_data(size) constraint,
column_name3 type_data(size) constraint,
... ...
);
|