目录

1、基础查询

2、条件查询

3、模糊查询

4、字段控制查询

5、排序

6、聚合函数

7、分组查询

8、LIMIT:限定查询起始行


DQL(Data Query Language):数据查询语言

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

语法:

select 列名  --> 要查询的列名称

from 表名      --> 要查询的表名称

where  条件      --> 行条件

group by 分组列    --> 对结果分组

having 分组条件     --> 分组后的行条件

order by 排序列   --> 对结果分组

limit 起始行, 行数   --> 结果限定

1、基础查询

查询所有列

SELECT   *    FROM    表名;

* :通配符,表示所有列

SELECT  *  FROM  stu;

 查询指定列

   SELECT  列名1, 列名2, …列名n  FROM  表名;

SELECT  sid,  sname, age  FROM  stu

2、条件查询

   2.1 条件查询介绍

条件查询就是在查询时给出WHERE子句,在WHERE子句中可以使用如下运算符及关键字:

  • =、!=、<>、<、<=、>、>=;
  • BETWEEN…AND;
  • IN(set);
  • IS NULL;
  • AND;
  • OR;
  • NOT;

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

 SELECT  *  FROM  stu WHERE  gender='female'  AND  age<50;

2.3 查询学号为S_1001,或者姓名为liSi的记录

SELECT  *  FROM  stu  WHERE  sid ='S_1001'  OR  sname='liSi';

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

SELECT  *  FROM  stu  WHERE  sid  IN ('S_1001','S_1002','S_1003');

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

SELECT  *  FROM  stu  WHERE  sid   NOT IN ('S_1001','S_1002','S_1003');

2.6 查询年龄为null的记录

SELECT   *   FROM   stu WHERE   age   IS NULL;

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

SELECT   * FROM   stu  WHERE  age>=20  AND  age<=40;

或者

SELECT   * FROM   stu  WHERE  age  BETWEEN  20  AND  40;

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

SELECT   * FROM   stu  WHERE  gender != 'male';

或者

SELECT   *  FROM   stu  WHERE   gender <> 'male';

或者

SELECT   * FROM   stu  WHERE  NOT  gender='male';

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

SELECT *  FROM stu  WHERE NOT sname IS NULL;

或者

SELECT *  FROM stu  WHERE sname IS NOT NULL;

3、模糊查询

       SELECT  字段  FROM    WHERE  某字段  Like  条件

 其中关于条件,SQL 提供了两种匹配模式:

(1)% :表示任意 0 个或多个字符。可匹配任意类型和长度的字符,有些情况下若是中文,请使用两个百分号(%%)表示。

(2) _ : 表示任意单个字符。匹配单个任意字符,它常用来限制表达式的字符长度语句。

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

SELECT  * FROM  stu WHERE  sname  LIKE '_ _ _ _ _';

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

SELECT  * FROM  stu  WHERE  sname  LIKE  '_ _ _ _i';

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

SELECT  *  FROM  stu WHERE sname LIKE 'z%';

其中“%”匹配0~n个任何字母。

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

SELECT   * FROM   stu  WHERE   sname   LIKE  '_i%';

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

SELECT  * FROM  stu  WHERE  sname  LIKE  '%a%';

4、字段控制查询

4.1 去掉重复记录

去除重复记录(两行或两行以上记录中系列的上的数据都相同),例如emp表中sal字段就存在相同的记录。当只查询emp表的sal字段时,那么会出现重复记录,那么想去除重复记录,需要使用DISTINCT:

SELECT   DISTINCT  sal   FROM   emp;

4.2 查看雇员的月薪与佣金之和

  因为sal和comm两列的类型都是数值类型,所以可以做加运算。如果sal或comm中有一个字段不是数值类型,那么会出错。

SELECT  *, sal+comm   FROM   emp;

comm列有很多记录的值为NULL,因为任何东西与NULL相加结果还是NULL,所以结算结果可能会出现NULL。下面使用了把NULL转换成数值0的函数IFNULL:

SELECT  *, sal+IFNULL(comm,0)  FROM  emp;

4.3 给列名添加别名

在上面查询中出现列名为sal+IFNULL(comm,0),这很不美观,现在我们给这一列给出一个别名,为total:

SELECT  *,  sal+IFNULL(comm,0)  AS  total  FROM  emp;

给列起别名时,是可以省略AS关键字的:

SELECT  *, sal+IFNULL(comm,0)  total  FROM  emp;

5、排序

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

SELECT  * FROM  stu  ORDER  BY  sage  ASC;

或者

SELECT  * FROM  stu ORDER BY  sage;

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

SELECT  * FROM   stu ORDER  BY  age  DESC;

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

SELECT  *  FROM  emp ORDER  BY  sal  DESC ,empno  ASC;

6、聚合函数

聚合函数是用来做纵向运算的函数:

COUNT() 统计指定列不为NULL的记录行数;
MAX() 计算指定列的最大值,如果指定列是字符串类型,那么使用字符串排序运算;
MIN() 计算指定列的最小值,如果指定列是字符串类型,那么使用字符串排序运算;
SUM() 计算指定列的数值和,如果指定列类型不是数值类型,那么计算结果为0;
AVG(): 计算指定列的平均值,如果指定列类型不是数值类型,那么计算结果为0;

6.1 COUNT:当需要纵向统计时可以使用COUNT()。

  • 查询emp表中记录数:

SELECT  COUNT(*)  AS  cnt  FROM  emp;

  • 查询emp表中有佣金的人数:

SELECT  COUNT(comm)  cnt  FROM  emp;

注意,因为count()函数中给出的是comm列,那么只统计comm列非NULL的行数。

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

SELECT  COUNT(*)  FROM  emp   WHERE  sal > 2500;

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

SELECT  COUNT(*)  AS cnt  FROM emp WHERE sal+IFNULL(comm,0) > 2500;

  • 查询有佣金的人数,以及有领导的人数:

SELECT  COUNT(comm),  COUNT(mgr)  FROM  emp;

6.2 SUM和AVG:当需要纵向求和时使用sum()函数。

  • 查询所有雇员月薪和:

SELECT   SUM(sal)   FROM  emp;

  • 查询所有雇员月薪和,以及所有雇员佣金和:

SELECT  SUM(sal),  SUM(comm)  FROM  emp;

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

SELECT  SUM(sal+IFNULL(comm,0))  FROM  emp;

  • 统计所有员工平均工资:

SELECT  SUM(sal), COUNT(sal)  FROM  emp;

或者

SELECT  AVG(sal)  FROM  emp;

6.3 MAX和MIN

  • 查询最高工资和最低工资:

SELECT  MAX(sal),  MIN(sal)  FROM  emp;

7、分组查询

当需要分组查询时需要使用GROUP BY子句,例如查询每个部门的工资和,这说明要使用部分来分组。

7.1 分组查询

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

SELECT  deptno, SUM(sal)

FROM  emp

GROUP  BY  deptno;

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

SELECT  deptno,COUNT(*)

FROM  emp

GROUP  BY  deptno;

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

SELECT  deptno ,COUNT(*)

FROM  emp

WHERE  sal>1500

GROUP  BY  deptno;

7.2 HAVING子句

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

SELECT  deptno,  SUM(sal)

FROM   emp

GROUP  BY  deptno

HAVING  SUM(sal) > 9000;

注意,WHERE是对分组前记录的条件,如果某行记录没有满足WHERE子句的条件,那么这行记录不会参加分组;而HAVING是对分组后数据的约束。

8、LIMIT:限定查询起始行

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

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

SELECT  *  FROM  emp  LIMIT  0, 5;

注意,起始行从0开始,即第一行开始!

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

SELECT  *  FROM  emp  LIMIT  3, 10;

SQL 语句 (数据查询语言)相关推荐

  1. mysql实验6语言结构_实验六 SQL语言数据查询语言DQL.pdf

    实验六 SQL语言数据查询语言DQL 实验六 SQL 语言数据查询语言DQL 一.实验目的 数据查询语言指对数据库中的数据查询.统计.分组.排序等操作.查询语 句可以分为简单查询.连接查询.嵌套查询和 ...

  2. mysql对所有列的数据进行修改6_MySQL的SQL语句 - 数据定义语句(6)- ALTER TABLE 语句 (3)...

    添加和删除列 使用ADD向表中添加新列,使用DROP删除现有列.DROP col_name是对标准SQL的MySQL扩展. 若要在表行的特定位置添加列,请使用FIRST col_name 或者 AFT ...

  3. mysql load xml_MySQL的SQL语句 - 数据操作语句(10)- LOAD XML 语句

    LOAD XML 语句 1. LOAD XML 2. [LOW_PRIORITY | CONCURRENT] [LOCAL] 3. INFILE 'file_name' 4. [REPLACE | I ...

  4. mysql select call_MySQL的SQL语句 - 数据操作语句(1)- CALL 语句

    CALL 语句 1. CALL sp_name([parameter[,...]]) 1. CALL sp_name[()] CALL 语句调用 CREATE PROCEDURE 定义的存储过程. 如 ...

  5. mysql的values使用_MySQL的SQL语句 - 数据操作语句(16)- VALUES 语句

    VALUES 语句 VALUES 是 MySQL 8.0.19 中引入的一个 DML 语句,它以表的形式返回一个或多个行的集合.换句话说,它是一个表值构造器,也可以作为独立的 SQL 语句来运行. 1 ...

  6. call 在mysql,MySQL的SQL语句 - 数据操做语句(1)- CALL 语句

    CALL 语句 CALL sp_name([parameter[,...]])CALL sp_name[()] CALL 语句调用 CREATE PROCEDURE定义的存储过程. 若是存储过程不带参 ...

  7. mysql修改的值子查询语句_MySQL的SQL语句 - 数据操作语句(13)- 子查询(13)

    子查询的限制 ● 通常,不能在子查询中修改表并从同一表中进行选择.例如,此限制适用于以下形式的语法: 1. DELETE FROM t WHERE ... (SELECT ... FROM t ... ...

  8. mysql语句6_MySQL的SQL语句 - 数据操作语句(6)- INSERT 语句

    INSERT 语句 1. INSERT [LOW_PRIORITY | DELAYED | HIGH_PRIORITY] [IGNORE] 2. [INTO] tbl_name 3. [PARTITI ...

  9. MySQL中定义fk语句_MySQL的SQL语句 - 数据定义语句(6)- ALTER TABLE 语句 (4)

    外键和其他约束 InnoDB和NDB存储引擎支持 FOREIGN KEY 和 REFERENCES 子句,这些存储引擎实现了ADD [CONSTRAINT [symbol]] FOREIGN KEY ...

  10. mysql更改数据语句6_MySQL的SQL语句 - 数据定义语句(6)- ALTER TABLE 语句(1)

    ALTER TABLE 语句 ALTER TABLE更改表的结构.例如,可以添加或删除列.创建或销毁索引.更改现有列的类型.重命名列或表本身.还可以更改表特性,例如用于表或表注释的存储引擎. ●要使用 ...

最新文章

  1. C#方法参数传递-同时使用ref和out关键字
  2. POJ3133(插头dp)
  3. Android Studio怎么设置悬浮提示文字框显示函数
  4. JavaScript学习随记——对象
  5. Haproxy 实现Apache的负载均衡
  6. 毕啸南专栏 | 对话李开复:AI科学家的转型之路
  7. C1007: 无法识别的标志“-Ot”
  8. Linux SSHD服务安装与维护详解(一)——SSHD安装、启动与密钥认证实现
  9. linkedblockingqueue 后 take 不消化_消化不良的症状原因有哪些?
  10. java初级工程师 项目_java初级工程师项目经验简历范文
  11. 微信和qq默认表情代码对照表及表情文件下载
  12. 苹果ios8_一款苹果手机上目前体验还不错的免费小说软件,支持一键缓存
  13. Origin非线性拟合选项
  14. 【014】求字体-上传图片自动识别字体
  15. 静态路由使用下一跳和出接口的区别,我猜你不知道这一点!
  16. 用Git上传代码到华为云(图解详细)
  17. Bert预训练新法则
  18. 小白学习编程最容易进入的六大误区,你中招了吗?
  19. 网络安全术语和协议栈自身的脆弱性
  20. 【DNS域名解析服务】

热门文章

  1. 一个无知oier的娱乐——我的游戏开发经历
  2. android小技巧(一) 格式化时间输出 简单的adapter PreferenceManager handler与 handlerThread
  3. 猜歌?没有我猜不到的歌!因为我有Python脚本!
  4. 安徽大学软件构造(设计模式)实验集
  5. office或WPS使用
  6. 无人驾驶算法——车辆横摆角速度计算方法
  7. 【英语:语法基础】C2.日常对话-兴趣爱好
  8. initialcontext java_再发一帖,初始化上下文求解(initialContext)
  9. Windows编译和使用ffmpeg
  10. Excel功能的强大