当前位置:   article > 正文

数据库(mysql)-基本查询语句(DQL)

数据库(mysql)-基本查询语句(DQL)

查询语句

这边查询是给予一定表格,这边先做个解释

教师表包括(name(姓名),gender(性别),salary(工资),title(职位),subject_id(课程的编号),comm(奖金))

学生表包括(姓名(name),gender(性别),job(职位),生日(birth))

模版

SELECT 字段名 FROM 查询表 WHERE 查询语句

或与非

AND 查询语句条件必须同时满足才能返回true,      满足true就返回查询相应的值

OR 查询语句条件只要满足其一就返回true,            满足true就返回查询相应的值

NOT 与查询条件相反就返回true,                             满足true就返回查询相应的值

 实例

  1. #查看工资高于5000的女老师都有谁?
  2. SELECT name,age,gender,salary
  3. FROM teacher
  4. WHERE salary>5000 AND gender='女';
  5. #查看工资高于5000的男老师或所有女老师的工资?
  6. SELECT name,gender,salary
  7. FROM teacher
  8. WHERE salary>5000 AND gender='男'
  9. OR gender='女';
  10. 6.查看工资在40008000以外的老师及具体工资?
  11. SELECT name,salary
  12. FROM teacher
  13. WHERE salary NOT BETWEEN 4000 AND 8000;

需要注意是或与且具有优先级,AND级别比OR级别高,会优先执行AND的代码

用于在一个范围内筛选值(一般数字范围,含头含尾)

BETWEEN  最小值 AND 最大值 

实例 

  1. #查看工资在40008000以外的老师及具体工资?
  2. SELECT name,salary
  3. FROM teacher
  4. WHERE salary NOT BETWEEN 4000 AND 8000;

指定多个可能的值来过滤结果集

IN(value1,value2,...) 多个值有,分割

  1. #查看一级讲师和二级讲师的奖金(comm)是多少?
  2. SELECT name,comm
  3. FROM teacher
  4. WHERE title IN ('一级讲师','二级讲师');

用于从结果集中删除重复的行

SELECT  DINSTINCT 字段名 FROM 查询表名

  1. #查看所有女老师的职称都是什么?
  2. SELECT DISTINCT title
  3. FROM teacher
  4. WHERE gender='女';

模糊查询

LIKE 关键字 ,用于在 WHERE 子句中搜索列中的指定模式

通配符

 % :匹配0,1个 多个字符

_  :  匹配单一字符

  1. #举例
  2. 1.某字段后模糊查询
  3. # 查询名字姓"李"的学生姓名
  4. SELECT name,gender,age
  5. FROM student
  6. WHERE name LIKE '李%';
  7. 2.某字段前模糊查询
  8. # 查询名字以"郭"结尾的学生姓名
  9. SELECT name,age,gender
  10. FROM student
  11. WHERE name LIKE '%郭';
  12. 3.包含某字符的模糊查询
  13. # 查询名字中包含"江"的学生姓名
  14. SELECT name,age,gender
  15. FROM student
  16. WHERE name LIKE '%江%';
  17. _ 举例
  18. 1.一个_模糊匹配
  19. # 查询名字第二个字是"苗"的学生信息
  20. SELECT name,age,gender
  21. FROM student
  22. WHERE name LIKE '_苗%';
  23. 2. 多个_模糊匹配
  24. #查询名字中第3个字是'杰'的学生信息
  25. SELECT name,age,gender
  26. FROM student
  27. WHERE name LIKE '__杰%' ;

NULL值判断

区别  NULL是一种状态 不是数值 和 java中定义的不一样

IS  是一个比较操作符,它主要用于与NULL 值进行比较

因为标准的比较操作符(如 =<> 等)不能用于 NULL 值,所以需要使用 IS或 IS NOT 来检查 NULL 值

实例

  1. 1.查询某字段状态为null
  2. #查询奖金为null的老师
  3. SELECT name, comm FROM teacher WHERE comm IS NULL;
  4. 2.查询某字段状态不为为null
  5. #查询奖金为null的老师
  6. SELECT name, comm FROM teacher WHERE comm IS NOT NULL;

 排序

 ORDER BY  用于对查询结果集中的记录进行排序,默认升序

 实例

  1. 1.升序
  2. #查看老师的奖金排名,奖金由少到多(默认升序)
  3. SELECT name, comm FROM teacher ORDER BY comm ASC(可写可不写);
  4. 2.降序
  5. #查看老师的奖金排名,奖金由少到多(默认升序)
  6. SELECT name, comm FROM teacher ORDER BY comm DESC(必须写);

 这边用学生表举例

特殊情况 日期排列 (远小近大) 是以现在时间为判断基准

  1. #查看学生的生日,按照远小近大的升序(年龄由大到小)
  2. SELECT name,birth From student ORDER BY birth ;
  3. #查看学生的生日,按照远小近大的升序(年龄由小到大)
  4. SELECT name,birth From student ORDER BY birth DESC;

 多字段排序

ORDER BY 字段名1,字段名2...  

优先结果集以第一个字段排序,当第一个字段有重复的值就以第二个字段排序,依次类推

当一个字段排序没有重复的值,不会用第二个字段排序

 实例

  1. #查看老师的奖金和工资 首先按照奖金升序,再以工资降序
  2. SELECT comm,salary From teacher ORDER BY comm,salary DESC;

注意的是null是状态,它可能是无限大或者无限小,这边是无限小 

 分页

运用了大量数据,电商产品

分页是查询的方言,不同数据库sql写法不同

这边以mariadb和mysql举例

SELECT 字段名

FROM 查询表格

WHERE 查询语句

ORDER BY 字段

LIMIT M,N 用于分页查询 

M:跳过结果集中多少条记录

N:从跳过的记录后开始检索出多少条记录

 实例

  1. #查询老师奖金前5
  2. M :(1-1)*5 这边指的是跳过条目 这边要看前5名,不需要跳过
  3. N:5 显示条目
  4. SELECT name,salary FROM teacher ORDER BY salary DESC LIMIT 0,5;
  5. #查询老师奖金6-10
  6. M :(2-1)*5=5 这边指的是跳过条目 这边要跳过前5名,5/5是一页,在原本第2页要现在放置到第一页
  7. N:5
  8. SELECT name,salary FROM teacher ORDER BY salary DESC LIMIT 5,5;
  9. #查询老师奖金10-15
  10. M : 跳过9条,
  11. N: 6 15-10+1=6
  12. SELECT name,salary FROM teacher ORDER BY salary DESC LIMIT 9,6;
  13. #查询老师奖金信息 按照降序排,每页显示3条,显示5
  14. M:(5-1)*3=12; 这边指的是页数
  15. N:5
  16. SELECT name ,comm FROM teacher ORDER BY comm DESC LIMIT 12,3;

使用表达式 

  1. #查看老师的年薪和月薪
  2. SELECT name ,salary,salary*12 FROM teacher;
  3. #薪资没有空值null

 空值函数

IFNULL(arg1,arg2) 如果arg1不为null,返回arg1,否则返回arg2

  1. #NULL值是状态不能进行计算,这边使用IFNULL,当comm为null替换成0
  2. #查看老师的奖金和薪资的总和
  3. SELECT name, salary,comm ,salary+IFNULL(comm,0) FROM teacher;
  4. #查看老师的奖金和全年的奖金
  5. SELECT name, salary,comm ,IFNULL(comm,0)*12 FROM teacher;

 别名

字段名 AS '别名' 

实例都行 

  1. #字段别名(不写 AS)
  2. SELECT name,salary,salary*12 annusal FROM teacher;
  3. #字段别名(别名单引号)
  4. SELECT name,salary,salary*12 'annusal' FROM teacher;
  5. #字段别名(别名单引号加AS)
  6. SELECT name,salary,salary*12 AS 'annusal' FROM teacher;
  7. #字段别名(别名双引号加AS)
  8. SELECT name,salary,salary*12 "annusal" FROM teacher;
  9. #字段别名(别名双引号加AS)
  10. SELECT name,salary,salary*12 AS "annusal" FROM teacher;

 运行图

 特殊情况 

数据库有关键字或者别名中有空格: 必须加单引号或者写双引号

  1. //这边必须写单引号或者双引号
  2. SELECT name,salary,salary*12 AS "annusal unlock" FROM teacher;
  3. //这边必须写单引号或者双引号
  4. SELECT name,salary,salary*12 AS "FORM" FROM teacher;
不写报语法结构错误

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/菜鸟追梦旅行/article/detail/394845
推荐阅读
相关标签
  

闽ICP备14008679号