当前位置:   article > 正文

3、DQL(数据查询语句)_查询student表中字段包含有a,并且共有10个字的记录

查询student表中字段包含有a,并且共有10个字的记录

目录

01、DQL(数据查询语言)

02、创建学生表(stu)、雇员表(emp) 完成数据查询操作

0、创建表:学生表(stu)、雇员表(emp)

1、基础查询

2、条件查询

3、模糊查询

4、字段控制查询 

5、排序 

6、聚合函数 

7、分组查询

8、HAVING子句:对分组后的数据进行过滤

       8.1 having与where的区别

9、 limit:limit用来限定查询结果的起始行,以及总行数。

10、查询语句书写顺序

11、查询语句执行顺序:


01、DQL(数据查询语言)

        数据库执行DQL语句不会对数据进行改变,而是让数据库发送结果集给客户端。

        查询返回的结果集是一张虚拟表

(1)查询关键字:SELECT

        语法:SELECT 列名 FROM 表名

(2)常用命令:

        SELECT selection_list /*要查询的列名称*/

02、创建学生表(stu)、雇员表(emp) 完成数据查询操作

0、创建表:学生表(stu)、雇员表(emp)

(1)创建stu、emp表代码:

  1. #创建数据库myStudent
  2. CREATE DATABASE IF NOT EXISTS `myStudent`;
  3. #创建学生表:stu
  4. CREATE TABLE stu (
  5. sid CHAR(6),
  6. sname VARCHAR(50),
  7. age INT,
  8. gender VARCHAR(50)
  9. );
  10. #添加数据:向学生表stu中添加数据
  11. INSERT INTO stu VALUES('S_1001', 'liuYi', 35, 'male');
  12. INSERT INTO stu VALUES('S_1002', 'chenEr', 15, 'female');
  13. INSERT INTO stu VALUES('S_1003', 'zhangSan', 95, 'male');
  14. INSERT INTO stu VALUES('S_1004', 'liSi', 65, 'female');
  15. INSERT INTO stu VALUES('S_1005', 'wangWu', 55, 'male');
  16. INSERT INTO stu VALUES('S_1006', 'zhaoLiu', 75, 'female');
  17. INSERT INTO stu VALUES('S_1007', 'sunQi', 25, 'male');
  18. INSERT INTO stu VALUES('S_1008', 'zhouBa', 45, 'female');
  19. INSERT INTO stu VALUES('S_1009', 'wuJiu', 85, 'male');
  20. INSERT INTO stu VALUES('S_1010', 'zhengShi', 5, 'female');
  21. INSERT INTO stu VALUES('S_1011', 'xxx', NULL, NULL);
  22. #创建雇员表:emp
  23. CREATE TABLE emp(
  24. empno INT,
  25. ename VARCHAR(50),
  26. job VARCHAR(50),
  27. mgr INT,
  28. hiredate DATE,
  29. sal DECIMAL(7,2),
  30. comm DECIMAL(7,2),
  31. deptno INT
  32. ) ;
  33. #添加数据:向雇员表emp中添加数据
  34. INSERT INTO emp VALUES(7369,'SMITH','CLERK',7902,'1980-12-17',800,NULL,20);
  35. INSERT INTO emp VALUES(7499,'ALLEN','SALESMAN',7698,'1981-02-20',1600,300,30);
  36. INSERT INTO emp VALUES(7521,'WARD','SALESMAN',7698,'1981-02-22',1250,500,30);
  37. INSERT INTO emp VALUES(7566,'JONES','MANAGER',7839,'1981-04-02',2975,NULL,20);
  38. INSERT INTO emp VALUES(7654,'MARTIN','SALESMAN',7698,'1981-09-28',1250,1400,30);
  39. INSERT INTO emp VALUES(7698,'BLAKE','MANAGER',7839,'1981-05-01',2850,NULL,30);
  40. INSERT INTO emp VALUES(7782,'CLARK','MANAGER',7839,'1981-06-09',2450,NULL,10);
  41. INSERT INTO emp VALUES(7788,'SCOTT','ANALYST',7566,'1987-04-19',3000,NULL,20);
  42. INSERT INTO emp VALUES(7839,'KING','PRESIDENT',NULL,'1981-11-17',5000,NULL,10);
  43. INSERT INTO emp VALUES(7844,'TURNER','SALESMAN',7698,'1981-09-08',1500,0,30);
  44. INSERT INTO emp VALUES(7876,'ADAMS','CLERK',7788,'1987-05-23',1100,NULL,20);
  45. INSERT INTO emp VALUES(7900,'JAMES','CLERK',7698,'1981-12-03',950,NULL,30);
  46. INSERT INTO emp VALUES(7902,'FORD','ANALYST',7566,'1981-12-03',3000,NULL,20);
  47. INSERT INTO emp VALUES(7934,'MILLER','CLERK',7782,'1982-01-23',1300,NULL,10);

(2)创建后的stu、emp表如下

        ①学生表:stu

        ②雇员表:emp

1、基础查询

(1)MySQL语句:

  1. #1.基础查询
  2. #1.1 查询stu表中的所有字段
  3. SELECT `sid`,`sname`,`age`,`gender` FROM `stu`
  4. SELECT * FROM stu; #当字段太多,查询所有字段,其中*表示所有
  5. #1.2 查询学生表中的指定列
  6. SELECT `sid`,`sname` FROM `stu`

(2)输出结果

        1.1 查询stu表中的所有字段(-->即查询所有列)

        1.2 查询学生表stu中的指定列:如查询sid、sname列

2、条件查询

(1)MySQL语句:

  1. #2.条件查询
  2. /*2.1 条件查询介绍
  3. 条件查询就是在查询时给出where子句,在where子句中使用如下运算符及关键字:
  4. -->: = != <> < <= > >=
  5. -->: between...and
  6. -->: IN(set)
  7. -->: IS NULL
  8. -->: AND
  9. -->: OR
  10. -->: NOT
  11. */
  12. ##查询某某记录=查询某一条数据的所有记录
  13. #2.2 查询性别为女,并且年龄大于50的记录
  14. SELECT * FROM `stu` WHERE `gender`='female' AND `age`>50;
  15. #查询性别为女,并且年龄大于50的员工编号和姓名
  16. SELECT `sid`,`sname` FROM `stu` WHERE `gender`='female' AND `age`>50;
  17. #2.3 查询学号为S_1001,或者姓名为lisi的记录
  18. SELECT * FROM stu WHERE `sid`='S_1001' OR `sname`='lisi';
  19. #2.4 查询学号为S_1001,S_1002,S_1003的记录
  20. SELECT * FROM stu WHERE `sid`='S_1001' OR `sid`='S_1002' OR `sid`='S_1003';
  21. SELECT * FROM stu WHERE `sid` IN('S_1001','S_1002','S_1003');
  22. #2.5 查询学号不是S_1001,S_1002,S_1003的记录
  23. SELECT * FROM stu WHERE `sid`!='S_1001' AND `sid`!='S_1002' AND `sid`!='S_1003';
  24. SELECT * FROM stu WHERE sid NOT IN('S_1001','S_1002','S_1003');
  25. #2.6 查询年龄为null的记录
  26. SELECT * FROM stu WHERE `age` IS NULL;
  27. #2.7 查询年龄在2040之间的学生记录
  28. SELECT * FROM stu WHERE `age`>=20 AND `age`<=40;
  29. SELECT * FROM stu WHERE `age` BETWEEN 20 AND 40;
  30. #2.8 查询性别非男的学生记录
  31. SELECT * FROM stu WHERE `gender`='female';
  32. SELECT * FROM stu WHERE `gender`!='male';
  33. SELECT * FROM stu WHERE `gender`<>'male';
  34. SELECT * FROM stu WHERE NOT `gender`='male';
  35. #2.9 查询姓名不为null的学生记录
  36. SELECT * FROM stu WHERE `sname` IS NOT NULL;
  37. SELECT * FROM stu WHERE NOT `sname` IS NULL;

(2)输出结果

        2.2 查询性别为女,并且年龄大于50的记录


        2.3 查询性别为女,并且年龄大于50的员工编号和姓名


        2.4 查询学号为S_1001,或者姓名为lisi的记录


        2.5 查询学号为S_1001,S_1002,S_1003的记录


        2.6 查询学号不是S_1001,S_1002,S_1003的记录


        2.7 查询年龄为null的记录


        2.8 查询年龄在20到40之间的学生记录


        2.9 查询性别非男的学生记录


        2.10 查询姓名不为null的学生记录

3、模糊查询

(1)MySQL语句:

  1. #3.模糊查询---LIKE
  2. /*
  3. 当想查询姓名中包含a字符的学生时就需要使用模糊查询了。
  4. 模糊查询需要使用关键字:LIKE
  5. 通配符:
  6. _ 表示任意一个字符
  7. % 表示任意0~n个字符
  8. */
  9. #3.1 查询姓名由5个字母构成的学生记录
  10. SELECT * FROM stu WHERE `sname` LIKE '_____';
  11. #3.2 查询姓名由5个字母构成,并且第5个字母为"i"的学生记录
  12. SELECT * FROM stu WHERE `sname` LIKE '____i';
  13. #3.3 查询姓名以“z”开头的学生记录
  14. SELECT * FROM stu WHERE `sname` LIKE 'z%';
  15. #3.4 查询姓名中第2个字母为“i”的学生记录
  16. SELECT * FROM stu WHERE `sname` LIKE '_i%';
  17. #3.5 查询姓名中包含“a”字母的学生记录
  18. SELECT * FROM stu WHERE `sname` LIKE '%a%';

(2)输出结果:

        3.1 查询姓名由5个字母构成的学生记录


        3.2 查询姓名由5个字母构成,并且第5个字母为"i"的学生记录


        3.3 查询姓名以“z”开头的学生记录


        3.4 查询姓名中第2个字母为“i”的学生记录


        3.5 查询姓名中包含“a”字母的学生记录

4、字段控制查询 

(1)MySQL语句:

  1. #4.字段控制查询
  2. #4.1 去除重复记录:DISTINCT
  3. SELECT DISTINCT sal FROM emp;
  4. #4.2 查看雇员的月薪与佣金之和 注意: 一个数与NULL进行运算,结果为NULL
  5. /*(1)
  6. 因为sal和comm两列的类型都是数值类型,所以可以做加运算。
  7. 如果sal或comm中有一个字段不是数值类型,那么会出错。
  8. 例如:将会数据出错
  9. SELECT *,sal+comm FROM emp;
  10. 注意: 一个数与NULL进行运算,结果为NULL
  11. (2)
  12. comm列有很多记录的值为NULL,因为任何东西与NULL相加结果还是NULL,
  13. 所以结算结果可能会出现NULL。下面使用了把NULL转换成数值0的函数IFNULL:
  14. */
  15. SELECT *,sal+IFNULL(comm,0) FROM emp;
  16. #4.3 给列名添加别名,使用As关键字 As关键字可以省略不写
  17. SELECT *,sal+IFNULL(comm,0) AS '月薪与佣金之和' FROM emp;
  18. SELECT *,sal+IFNULL(comm,0) '月薪与佣金之和' FROM emp;

(2)输出结果:

        4.1 去除重复记录 DISTINCT


        4.2 查看雇员的月薪与佣金之和   注意: 一个数与NULL进行运算,结果为NULL


        4.3 给列名添加别名,使用As关键字   As关键字可以省略不写

5、排序 

(1)MySQL语句:

  1. #5.排序 ORDER BY ASC升序(默认排序) DESC降序
  2. #5.1 查询所有学生记录,按年龄升序排序
  3. SELECT * FROM stu ORDER BY `age` ASC;
  4. #5.2 查询所有学生记录,按年龄降序排序
  5. SELECT * FROM stu ORDER BY `age` DESC;
  6. #5.3 查询所有雇员,按月薪降序排序,如果月薪相同时,按编号升序排序
  7. SELECT * FROM emp ORDER BY `sal` DESC,`empno` ASC;
  8. #5.4 查询所有雇员,按月薪降序排序,如果月薪相同时,按编号降序排序
  9. SELECT * FROM emp ORDER BY sal DESC,empno DESC;
  10. #5.5 查询工资高于1600的员工记录,并按照薪资进行降序排序
  11. SELECT * FROM emp WHERE sal>1600 ORDER BY sal DESC;

(2)输出结果:

        5.1 查询所有学生记录,按年龄升序排序


        5.2 查询所有学生记录,按年龄降序排序


        5.3 查询所有雇员,按月薪降序排序,如果月薪相同时,按编号升序排序


        5.4 查询所有雇员,按月薪降序排序,如果月薪相同时,按编号降序排序


        5.5 查询工资高于1600的员工记录,并按照薪资进行降序排序

6、聚合函数 

(1)MySQL语句:

  1. #6.聚合函数
  2. /*
  3. 聚合函数用来做纵向运算的函数
  4. (1)COUNT():统计指定列不为NULL的记录行数
  5. (2)MAX():计算指定列的最大值,如果指定列是字符串类型,那么使用字符串排序运算
  6. (3)MIN():计算指定列的最小值,如果指定列是字符串类型,那么使用字符串排序运算
  7. (4)SUM():计算指定列的数值和,如果指定列类型不是数值类型,那么计算结果为0;
  8. (5)AVG():计算指定列的平均值,如果指定列类型不是数值类型,那么计算结果为0;
  9. */
  10. #(1COUNT():统计指定列不为NULL的记录行数
  11. SELECT COUNT(comm) AS '有佣金的人数' FROM emp;
  12. SELECT COUNT(mgr) AS '有领导的员工数目' FROM emp;
  13. SELECT COUNT(*) AS '数据数目' FROM emp;
  14. #(2MAX():计算指定列的最大值,如果指定列是字符串类型,那么使用字符串排序运算
  15. SELECT MAX(sal) AS '最高工资' FROM emp;
  16. #(3MIN():计算指定列的最小值,如果指定列是字符串类型,那么使用字符串排序运算;
  17. SELECT MIN(sal) AS '最低工资' FROM emp;
  18. #(4SUM():计算指定列的数值和,如果指定列类型不是数值类型,那么计算结果为0;
  19. SELECT SUM(sal) AS '员工工资之和' FROM emp;
  20. #(5AVG():计算指定列的平均值,如果指定列类型不是数值类型,那么计算结果为0;
  21. SELECT AVG(sal) AS '员工平均工资' FROM emp;
  22. #查询emp表中月薪大于2500的人数
  23. SELECT COUNT(*) AS '月薪大于2500的人数' FROM emp WHERE sal>2500;
  24. #统计月薪与佣金之和大于2500元的人数
  25. SELECT COUNT(sal+IFNULL(comm,0)) AS '月薪与佣金之和大于2500元的人数' FROM emp WHERE sal+IFNULL(comm,0)>2500;
  26. #查询所有雇员月薪+佣金和
  27. SELECT SUM(sal+IFNULL(comm,0)) AS '所有雇员月薪+佣金和' FROM emp;

(2)输出结果:

        (1)COUNT():统计指定列不为NULL的记录行数

        (2)MAX():计算指定列的最大值,如果指定列是字符串类型,那么使用字符串排序运算


       (3) MIN():计算指定列的最小值,如果指定列是字符串类型,那么使用字符串排序运算;


        (4)SUM():计算指定列的数值和,如果指定列类型不是数值类型,那么计算结果为0;


        (5)AVG():计算指定列的平均值,如果指定列类型不是数值类型,那么计算结果为0;

        #查询emp表中月薪大于2500的人数

        #统计月薪与佣金之和大于2500元的人数

        #查询所有雇员月薪+佣金和

7、分组查询

(1)MySQL语句:

  1. #7.分组查询
  2. /*
  3. 当需要分组查询时需要使用GROUP BY子句,例如查询每个部门的工资和,这说明要使用部分来分组。
  4. 注:凡和聚合函数同时出现的列名,则一定要写在group by 之后
  5. */
  6. #7.1 查询每个部门的部门编号和每个部门的工资和:
  7. SELECT deptno AS '部门编号',SUM(sal) AS '部门的工资和' FROM emp GROUP BY deptno;
  8. #7.2 查询每个部门的部门编号以及每个部门的人数:
  9. SELECT deptno AS '部门编号',COUNT(*) AS '每个部门的人数' FROM emp GROUP BY deptno;
  10. #7.3 查询每个部门的部门编号以及每个部门工资大于1500的人数:
  11. SELECT deptno AS '部门编号',COUNT(*) AS '部门工资大于1500的人数' FROM emp WHERE sal>1500 GROUP BY deptno;

(2)输出结果:

        7.1 查询每个部门的部门编号和每个部门的工资和:

 

        7.2 查询每个部门的部门编号以及每个部门的人数:

 

        7.3 查询每个部门的部门编号以及每个部门工资大于1500的人数:

 

8、HAVING子句:对分组后的数据进行过滤

       8.1 having与where的区别

        注:having与where的区别:
             1.having是在分组后对数据进行过滤.
               where是在分组前对数据进行过滤
        
             2.having后面可以使用分组函数(统计函数)
               where后面不可以使用分组函数。
        WHERE是对分组前记录的条件,如果某行记录没有满足WHERE子句的条件,那么这行记录不会参加分组;而HAVING是对分组后数据的约束。

(1)MySQL语句:

  1. #8.HAVING子句:对分组后的数据进行过滤
  2. /*
  3. 注:having与where的区别:
  4. 1.having是在分组后对数据进行过滤.
  5. where是在分组前对数据进行过滤
  6. 2.having后面可以使用分组函数(统计函数)
  7. where后面不可以使用分组函数。
  8. WHERE是对分组前记录的条件,如果某行记录没有满足WHERE子句的条件,
  9. 那么这行记录不会参加分组;而HAVING是对分组后数据的约束。
  10. */
  11. #8.1 查询工资总和大于9000的部门编号以及工资和:
  12. SELECT deptno AS '部门编号',SUM(sal) AS '工资和' FROM emp GROUP BY deptno HAVING SUM(sal)>9000;

(2)输出结果:

        8.1 查询工资总和大于9000的部门编号以及工资和:

 

9、 limit:limit用来限定查询结果的起始行,以及总行数。

(1)MySQL语句:

  1. #9.imit:LIMIT用来限定查询结果的起始行,以及总行数。
  2. #9.1 查询5行记录,起始行从0开始
  3. SELECT * FROM emp LIMIT 0,5;
  4. #9.2 查询10行记录,起始行从3开始
  5. SELECT * FROM emp LIMIT 3,10;
  6. #9.3 分页查询
  7. /*
  8. 如果一页记录为10条,希望查看第3页记录应该怎么查呢?
  9. 第一页记录起始行为0,一共查询10行;
  10. 第二页记录起始行为10,一共查询10行;
  11. 第三页记录起始行为20,一共查询10行;
  12. 查询语句书写顺序:select – from- where- group by- having- order by-limit
  13. 查询语句执行顺序:from - where -group by - having - select - order by-limit
  14. */

(2)输出结果:

        9.1 查询5行记录,起始行从0开始

 

        9.2 查询10行记录,起始行从3开始

 

10、查询语句书写顺序

        查询语句书写顺序:select – from- where- group by- having- order by-limit

11、查询语句执行顺序:

        查询语句执行顺序:from - where -group by - having - select - order by-limit

声明:本文内容由网友自发贡献,转载请注明出处:【wpsshop】
推荐阅读
相关标签
  

闽ICP备14008679号