知识点 | ||||||||||||||||||||||||||||||
一、语法格式 SELECT 字段 FROM 表名列表 //基本查询 WHERE 条件 //条件查询 二、运算符
三、模糊查询 语法:SELECT 字段 FROM 表名列表 WHERE 条件 LIKE 值; 注意:由于值是模糊的,因此需要用到通配符:%和_。 ①%:%用来匹配0个或多个字符,可以匹配任意类型和长度的字符,对长度没有限制。 ②_:_用来匹配任意单个字符,常用来限制表达式的字符长度。 四、排序查询 语法:SELECT 字段 FROM 表名列表 WHERE 条件 ORDER BY FIELD1 DESC/ASC, FILED2 DESC/ASC, …; 注意:DESC表示降序排列,ASC表示升序排列,如果排序方式省略不写,则表示使用默认值升序ASC。 五、限制查询 语法:SELECT 字段 LIMIT 起始偏移量, 行数; 注意:默认情况下,起始偏移量为0,这时只需要写返回的行数即可。由于MYSQL查询结果集顺序的不确定性,通常限制查询要配合排序查询使用。 六、聚合 语法:SELECT 字段 OP_NAME FROM 表名 WHERE 条件 GROUP BY FIELD, FIELD2, …WITH ROLLUP HAVING 条件; 注意:OP_NAME表示要进行的聚合操作,也就是聚合函数,常用聚合函数包括SUM(求和)、COUNT(*)(记录数)、MAX(最大值)、MIN(最小值)、AVG(平均值);GROUP BY表示要进行分类聚合的字段,WITH ROLLUP表示是否对分类聚合后的结果进行再汇总,这个关键字是可选的;HAVING表示对分类后的结果进行条件过滤。所有的NULL值不参与聚合函数的计算。 聚合函数:将一列数据作为一个整体,进行纵向计算。直接作用于字段。SELECT 聚合函数(字段列表) FROM 表名; |
练习 |
要求:创建数据表并完成下列练习。在实际操作后,填写正确的sql语句, create table emp ( id int comment '编号', workno varchar(10) comment '工号', name varchar(10) comment '姓名', gender char(1) comment '性别', age tinyint unsigned comment '年龄', idcard char(18) comment '身份证号', workaddress varchar(50) comment '工作地址', entrydate date comment '入职时间' ) comment '员工表'; insert into emp(id, workno, name, gender, age, idcard, workaddress, entrydate) VALUES (1, '1', 'Liu', 'W', 20, '123456789012345678', 'BJ', '2000-01-01'), (2, '2', 'Zhang', 'M', 18, '123456789012345670', 'BJ', '2005-09-01'), (3, '3', 'Wei', 'W', 38, '123456789012345670', 'SH', '2005-08-01'), (4, '4', 'Zhao', 'W', 18, '123456789012345670', 'BJ', '2009-12-01'), (5, '5', 'Xiao', 'W', 16, '123456789012345678', 'SH', '2007-07-01'), (6, '6', 'Yang', 'M', 28, '12345678901234567X', 'BJ', '2006-01-01'), (7, '7', 'Fan', 'M', 40, '123456789012345670', 'BJ', '2005-05-01'), (8, '8', 'Dai', 'W', 38, '123456789012345670', 'TJ', '2015-05-01'), (9, '9', 'Fan', 'W', 45, '123456789012345678', 'BJ', '2010-04-01'), (10, '10', 'Chen', 'M', 53, '123456789012345670', 'SH', '2011-01-01'), (11, '11', 'Zhang', 'M', 55, '123456789012345670', 'JS', '2015-05-01'), (12, '12', 'Chang', 'M', 32, '123456789012345670', 'BJ', '2004-02-01'), (13, '13', 'Zhang', 'M', 88, '123456789012345678', 'JS', '2020-11-01'), (14, '14', 'Mie', 'W', 65, '123456789012345670', 'XA', '2019-05-01'), (15, '15', 'Hu', 'M', 70, '12345678901234567X', 'XA', '2018-04-01'), (16, '16', 'Zhou', 'W', 18, null, 'BJ', '2012-06-01'); 1.查询年龄等于88的员工。 SELECT * FROM emp WHERE age = 88; 2.查询年龄小于20的员工信息。 SELECT * FROM emp WHERE age < 20; 3.查询年龄小于等于20的员工信息。 SELECT * FROM emp WHERE age <= 20; 4.查询没有身份证号的员工信息。 SELECT * FROM emp WHERE idcard IS NULL; 6.查询年龄不等于88的员工信息。(请用两种方式表示) -- 方式一 SELECT * FROM emp WHERE age != 88; -- 方式二 SELECT * FROM emp WHERE age <> 88; 7.查询年龄在15岁(包含)到20岁(包含)之间的员工信息。(请用三种方式表示) -- 方式一 SELECT * FROM emp WHERE age BETWEEN 15 AND 20; -- 方式二 SELECT * FROM emp WHERE age >= 15 AND age <= 20; -- 方式三 SELECT * FROM emp WHERE age >= 15 AND age <= 20 ORDER BY age; 8.查询性别为女且年龄小于25岁的员工信息。 SELECT * FROM emp WHERE gender = 'W' AND age < 25; 9.查询年龄等于18或20或40的员工信息。(请用两种方式表示) -- 方式一 SELECT * FROM emp WHERE age IN (18, 20, 40); -- 方式二 SELECT * FROM emp WHERE age = 18 OR age = 20 OR age = 40; 10.查询姓名为两个字的员工。 SQL 语句 SELECT * FROM emp WHERE CHAR_LENGTH(name) = 2; 的目的是从 emp 表中选择所有字段(即所有列)的数据,但仅限于那些 name 字段(即姓名字段)的字符长度等于2的记录。 ··· SELECT * FROM emp WHERE CHAR_LENGTH(name) = 2; ···· 11.查询身份证号码最后一位是X的员工信息。(请用两种方式表示) ``` -- 方式一 SELECT * FROM emp WHERE idcard LIKE '%X'; -- 方式二 SELECT * FROM emp WHERE RIGHT(idcard, 1) = 'X'; ``` 12.统计该企业员工数量。(聚合函数) ``` SELECT COUNT(*) FROM emp; ``` 13.统计该企业员工的平均年龄。(聚合函数) ``` SELECT AVG(age) FROM emp; ```` 14.统计该企业员工的最大年龄。(聚合函数) ``` SELECT MAX(age) FROM emp; ``` 15.统计西安地区的年龄之和。(聚合函数) ``` SELECT SUM(age) FROM emp WHERE workaddress = 'XA'; ``` |