目录
select语句的基本语法
SELECT [ALL|DISTINCT]要查询的内容
FROM表名列表
[WHERE条件表达式]
[GROUP BY字段名列表[HAVING逻辑表达式]]
[ORDER BY字段名[ASCIDESC]]
[LIMIT [OFFSET,] n];
注意:
all 全部输出,写为* 。distinct 只输出一次(不输出重复的)
在上述语法结构中,SELECT查询语句共有7个子句,其中SELECT和FROM子句为
必选子句,而WHERE、GROUPBY(用于字段分组)、ORDER BY(用于排序,升序或者降序)和LIMIT子句为可选子句,
HAVING子句与GROUP BY子句联合使用,不能单独使用。
SELECT子句既可以实现数据的简单查询、结果集的统计查询,也可以实现多表查
询。
二、简单查询
(1)基本查询
SELECT [ALLIDISTINCT]要查询的内容
FROM表名列表;
【例5-1】查询“学生选课”数据库的studentinfo表,输出所有学生的详细信息。
注:查询结果要输出表或视图的特定字段时,要明确指出字段名,多个字段名之间用
逗号分开。
对应的sql语句:SELECT sno,sname,sgender,sbirth,sclass
FROM studentinfo;
在SELECT子句的查询字段列表中,字段的顺序是可以改变的,无需按照表中定义的
顺序排列。例如,上述语句可以写为:
SELECT sname,sno,sgender,sbirth,sclass FROM studentinfo;
当要查询的内容是数据表中所有列的集合时,可以用符号“*”来代表所有字段名的集
合。例如,上述语句可以写为
SELECT * FROM studentinfo;
例:查询“学生选课”数据库的studentinfo表,输出所有学生的学号、姓名,以及此
次查询的日期和时间。用now()
对应的SQL语句如下:SELECT sno,sname,now()FROM studentinfo;
执行结果如图:
例:查询“学生选课”数据库的studentinfo表、输出所有学生的学号、姓名、以及此次查询的日期和时间,并分别使用“学生学号”“学生姓名”“查询日期”作为别名。原名as别名,(as可以省略)
对应的SQL语句如下:
SELECT sno学生学号,sname AS学生姓名,now()AS查询日期
FROM studentinfo;
执行结果如图:
为了清晰,此处把studentinfo表数据中sclass改了
例:查询“学生选课”数据库的studentinfo表,输出学生所在的班级,每个班级
只输出一次。
对应的SQL语句如下:
SELECT DISTINCT sclass
FROM studentinfo;
执行结果如图:
(2)使用WHERE子句
WHERE子句可以指定查询条件,用以从数据表中筛选出满足条件的数据行。其
语法格式如下:
SELECT [ALL|DISTINCT]要查询的内容
FROM表名列表
WHERE条件表达式;
WHERE子句的条件表达式可以使用的运算符如表
比较运算符的使用
例:查询“学生选课”数据库的studentinfo表,输出“网络技术101”班学生的详
细信息。
对应的SQL语句如下:
SELECT*
FROM studentinfo
WHERE sclass='网络技术101';
执行结果如图:
范围运算符的使用
例:查询“学生选课”数据库的studentinfo表,输出1993年7月出生的学生的详细信
息
对应的SQL语句如下:
SELECT *
FROM studentinfo
WHERE sbirth BETWEEN ' 1993-7-1' AND '1993-7-31';
执行结果如图
列表运算符的使用
例:查询“学生选课”数据库的studentinfo表,输出学号为10101001、
1010100的学生的详细信息。
对应的SQL语句如下:
SELECT *
FROM studentinfo
WHERE sno IN (' 10101001',’10102001',’11101001');
执行结果如图
模式匹配运算符的使用
在指定的条件不是很明确的情况下,可以使用LIKE运算符与模式字符串进行匹配
运算。其语法格式如下:
字段名[NOT] LIKE'模式字符串’
通配符和字符串必须括在单引号中。
如果要查找的字符串本身就包括通配符,可以用符号“\”将通配符转义为普通字符
'a%'表示以a开头的字符串
'%101'表示以101结尾的字符串
'_学%'表示第一位不知道,第二位是学的字符串
如果字符串本身有_,则用\表示
例'a\_',第一位是a,第二为是_的字符串
例:查询“学生选课”数据库的studentinfo表,输出姓“张”的学生的详细信息。
对应的SQL语句如下:
SELECT *
FROM studentinfo
WHERE sname LIKE'张%';
执行结果如图
空值判断运算符的使用
IS [NOT] NULL运算符用于判断指定字段的值是否为空值。对于空值判断,不能
使用比较运算符或模式匹配运算符。
对应的SQL语句如下:
SELECT *
FROM elective
WHERE score IS NULL;
执行结果如图
逻辑运算符的使用
查询条件可以是一个条件表达式,也可以是多个条件表达式的组合。逻辑运算符能够连接多个条件表达式,构成一个复杂的查询条件。逻辑运算符包括:AND(逻辑与)、OR(逻辑或)、NOT(逻辑非)。
例:查询“学生选课”数据库的studentinfo表,输出姓“王”且是“电子商务101"
班的学生的信息。
对应的SQL语句如下:
SELECT *
FROM studentinfo
WHERE sname
LIKE’王%' AND sclass ='电子商务101';
例:查询“学生选课”数据库的studentinfo表,输出姓“小”或者是
“电子商务101”班的学生的信息。
对应的SQL语句如下:
SELECT *
FROM studentinfo
WHERE sname LIKE'王%' OR sclass ='电子商务111';
例:查询“学生选课”数据库的studentinfo表,输出不是1993年出生的学生
的信息。
对应的SQL语句如下:
SELECT *
FROM studentinfo
WHERE NOT (YEAR(sbirth)=1993);
执行结果如图
(3)使用ORDER BY子句
在查询结果集中,数据行是按照它们在表中的顺序进行排列的。我们可以使用ORDERBY子句对查询结果集中的数据行依照指定字段的值重新排列。其语法格式如下:
SELECT
[ALL|DISTINCT]要查询的内容FROM表名列表
[WHERE条件表达式]
ORDER BY字段名[ASC|DESC];
例:查询“xxgc”数据库的studentinfo表,学生出生日期降序排列
对应的SQL语句如下:
SELECT * from studentinfo ORDER BY sbirth DESC;
(3)使用LIMIT子句
使用LIMIT子句可以指定查询结果从哪一条记录开始,一共查询多少条记录。其语
法格式如下:
SELECT [ALL|DISTINCT]要查询的内容
FROM表名列表
[WHERE条件表达式]
[ORDER BY字段名[ASC|DESC]]
LIMIT [OFFSET, ] n;
LIMIT子句接受一个或两个整数参数。其中OFFSET代表从第几行记录开始检索,n代表检索多少行记录。需要注意的是,OFFSET可以省略不写,默认取值为0,代表从第一行记录开始检索。
例:查询“学生选课”数据库的studentinfo表,输出前三条学生记录的信息。
SELECT *
FROM studentinfo
LIMIT 3;
执行结果
例:查询“学生选课”数据库的studentinfo表,输出表中第五行学生记录的信息。
对应的SQL语句如下:
SELECT *
FROM studentinfo
LIMIT 4,1:
执行结果如图