1. 数据查询语法(DQL)
DQL就是数据查询语言,数据库执行DQL语句不会对数据进行改变,而是让数据库发送结果集给客户端。
语法:
SELECT [TOP n /*结果限定*/ election_list /*要查询的列名称*/ FROM table_list /*要查询的表名称*/ WHERE condition /*行条件*/ GROUP BY grouping_columns /*对结果分组*/ HAVING condition /*分组后的行条件*/ ORDER BY sorting_columns /*对结果分组*/创建表
-- 创建表 CREATE TABLE stu ( sid NCHAR(6), sname NVARCHAR (50), age INT, gender NVARCHAR (50) ) ; -- 添加数据 INSERT INTO stu VALUES('S_1001', 'liuYi', 35, 'male'); INSERT INTO stu VALUES('S_1002', 'chenEr', 15, 'female'); INSERT INTO stu VALUES('S_1003', 'zhangSan', 95, 'male'); INSERT INTO stu VALUES('S_1004', 'liSi', 65, 'female'); INSERT INTO stu VALUES('S_1005', 'wangWu', 55, 'male'); INSERT INTO stu VALUES('S_1006', 'zhaoLiu', 75, 'female'); INSERT INTO stu VALUES('S_1007', 'sunQi', 25, 'male'); INSERT INTO stu VALUES('S_1008', 'zhouBa', 45, 'female'); INSERT INTO stu VALUES('S_1009', 'wuJiu', 85, 'male'); INSERT INTO stu VALUES('S_1010', 'zhengShi', 5, 'female'); INSERT INTO stu VALUES('S_1011', 'xxx', NULL, NULL);1.2 条件查询
条件查询就是在查询时给出WHERE子句,在WHERE子句中可以使用如下运算符及关键字:
=、!=、<>(不等于)、<、<=、>、>=
BETWEEN…AND
IN(set)
IS NULL
AND
OR
NOT
逻辑运算符
AND 并且 (多个条件同时成立)
OR 或者 (多个条件任意一个成立)
NOT 非 , 不是
优先级: NOT > AND > OR
1.3 模糊查询
当想查询姓名中包含a字母的学生时就需要使用模糊查询了。模糊查询需要使用关键字LIKE。
1.3.1 查询姓名由5个字母构成的学生记录
SELECT * FROM stu WHERE sname LIKE '_____';模糊查询必须使用LIKE关键字。其中
"_"匹配任意一个字母,5个"_"表示5个任意字母。
1.3.2 查询姓名由5个字母构成,并且第5个字母为“i”的学生记录
SELECT * FROM stu WHERE sname LIKE '____i';1.3.3 查询姓名以“z”开头的学生记录
SELECT * FROM stu WHERE sname LIKE 'z%';其中“%”匹配0~n个任何字母。
1.3.4 查询姓名中第2个字母为“i”的学生记录
SELECT * FROM stu WHERE sname LIKE '_i%';1.3.5 查询姓名中包含“a”字母的学生记录
SELECT * FROM stu WHERE sname LIKE '%a%';1.4.1 去除重复记录去除重复记录(两行或两行以上记录中系列的上的数据都相同),例如emp表中job字段就存在相同的记录。当只查询emp表的job字段时,那么会出现重复记录,那么想去除重复记录,需要使用DISTINCT:
SELECT DISTINCT job FROM emp;1.5 排序
ASC : 升序(默认值)
DESC: 降序
1.6 聚合函数
聚合函数是用来做纵向运算的函数:
将一列数据作为一个整体,进行纵向计算
| 函数 | 描述 |
|---|---|
| COUNT() | 统计指定列不为NULL的记录行数 |
| MAX() | 计算指定列的最大值,如果指定列是字符串类型,那么使用字符串排序运算 |
| MIN() | 计算指定列的最小值,如果指定列是字符串类型,那么使用字符串排序运算 |
| SUM() | 计算指定列的数值和,如果指定列类型不是数值类型,那么计算结果为0 |
| AVG() | 计算指定列的平均值,如果指定列类型不是数值类型,那么计算结果为0 |
语法
SELECT 聚合函数(字段列表) FROM 表名 ;注意 : NULL值是不参与所有聚合函数运算的。
1.7 分组查询
当需要分组查询时需要使用GROUP BY子句,例如查询每个部门的工资和,这说明要使用部分来分组。
语法:
SELECT 字段列表 FROM 表名 [ WHERE 条件 ] GROUP BY 分组字段名 [ HAVING 分组 后过滤条件 ];where与having区别
执行时机不同:where是分组之前进行过滤,不满足where条件,不参与分组;而having是分组
之后对结果进行过滤。
判断条件不同:where不能对聚合函数进行判断,而having可以。
注意事项:
分组之后,查询的字段一般为聚合函数和分组字段,查询其他字段无任何意义。
执行顺序: where > 聚合函数 > having 。
支持多字段分组, 具体语法为 : group by columnA,columnB
1.7.1 分组查询
查询每个部门的部门编号和每个部门的工资和:
SELECT deptno, SUM(sal) FROM emp GROUP BY deptno;