MYSQL基础知识(一)__查询语言DQL(1)

第一章 SQL的基本语法规范

1.sql不区分大小写,但是习惯上关键字、系统保留字、函数名称大写,表名和列名小写

2.sql使用空格或者回车来分隔每个单词都一样,习惯上每个子句换行WHERE子句中的每个条件占一行,子查询单独占一行

3.复杂的语句最好加上注释进行说明

①.#单行注释

#这是单行注释 示例1
-- 这是单行注释 示例2 (注意:这里是“-- ”,最后有空格不可沈略)

②.多行注释

/*
这是多行注释  示例1
这是多行注释  示例1
这是多行注释  示例1
这是多行注释  示例1
这是多行注释  示例1
*/

4.sql语句中使用分号作为分隔符,系统读取到分号才会执行语句

/*
select 列名1,列名2,……列名n                                            定义查询数据所在的列
from 表名1,表名2,……表名n                                              定义查询数据所在的表
where 限定条件1 and/or 限定条件2 ......                                  定义查询数据的限定条件(行)
group by 列名1,列名2,……列名n                                        定义分组函数的分组方式
having 分组条件1 and/or 分组条件2……                                  定义分组函数结果的限定条件
order by 列名1 asc/desc,列名2 asc/desc ......                          定义查询结果的排序方式
*/

第二章 SELECT基础

1.*代表所有列

SELECT * FROM emp;
SELECT * FROM dept;
SELECT * FROM salgrade;
SELECT * FROM bonus;

2.查询指定的列

SELECT ename,job,sal,deptno FROM emp;

3.对查询结果进行运算

-- 查询每个员工的年薪
SELECT ename,12*sal FROM emp;
-- 员工的年终奖定为年薪的10%再加上500
SELECT ename,(12*sal)*0.1+500 FROM emp;

4.空值参与运算得到结果也是空值

-- 计算员工的年收入
SELECT ename,sal,comm,12*(sal+comm) FROM emp;

5.别名

-- 查询结果中可以给列起别名加以说明
/*
列名 别名
列名 AS 别名
别名中如果包含特殊字符(空格),需要加双引号
双引号只会在起别名的时候出现,其他的所有地方都只能用单引号而不能用双引号
*/
SELECT ename xingming,job zhiwei FROM emp;
SELECT ename AS xingming,job AS zhiwei FROM emp;
SELECT ename 姓名,job 职位 FROM emp;

SELECT ename "xing ming",job "zhi wei" FROM emp;

-- 别名主要用来标识运算结果
SELECT ename,(12*sal)*0.1+500 AS nianzhongjiang FROM emp;

6.表达式

-- 表达式根据数据类型的不同分为数字表达式、字符表达式和日期表达式
-- 手动输入的表达式可以写在select后面,表中有多少行,表达式就显示多少次
-- 手动输入数字表达式可以直接写,日期和字符表达式必须加上单引号
SELECT 123.456,12*60*48,'I am the king' FROM emp;

-- mysql允许只写select,不写from;oracle必须要写select和from,不能缺少
-- 如果要查询的数据都是手动输入,与表中数据无关,可以不写from
SELECT 123.456,12*60*48,'I am the king';

-- 手动字符串必须加单引号,mysql在windows平台字符串不区分大小写,但是在linux区分大小写
-- 其他的数据库包括编程语言,字符串都要区分大小写
SELECT 'who are you',ename FROM emp;
SELECT job,'JOB' FROM emp;

7.distinct去重

SELECT job FROM emp;
SELECT DISTINCT job FROM emp;
SELECT DISTINCT deptno FROM emp;

-- 多列去重
SELECT DISTINCT job,deptno FROM emp;

-- 注意:普通列不能和去重的列同时查询,因为行数不匹配,不能组成一张表
-- select ename,distinct job from emp;

8.limit分页查询

SELECT * FROM emp;
-- 如果在查询结果中,想要得到固定某几行的结果,使用limit
-- limit 写在查询语句最后
-- limit m,n 表示从第m行开始显示n行数据,第一行的行号是0
SELECT * FROM emp LIMIT 2,5;

-- limit n  表示显示前n行数据
SELECT * FROM emp LIMIT 3;

第三章 限定和排序

1.where子句限定范围

/*
where子句后面必须是一个完整的逻辑表达式,结果只有两种true或者false
在where子句中,逻辑表达式通常是比较运算,比较条件是否满足
 =  >  <  >=  <=  !=(<>)
where子句限定条件通常是用表中的某一列数据作为条件,返回满足条件的数据
*/

-- 1.查询20号部门的员工信息
SELECT * FROM emp
WHERE deptno = 20;

-- 2.查询工资高于2000的员工信息
SELECT * FROM emp
WHERE sal > 2000;

-- 3.查询职位不是manager的员工信息
SELECT * FROM emp
WHERE job != 'MANAGER';
-- 手动输入字符串要加单引号,最好在匹配的时候大小写一致

-- 4.查询年薪小于20000的员工信息
-- 列的别名不能出现在where子句中
SELECT ename,job,sal,12*sal nianxin,deptno FROM emp
WHERE 12*sal < 20000;

-- 其他的数据库不支持*加上其他列一起查询,mysql允许
SELECT *,12*sal nianxin FROM emp;

-- where子句中的条件也可以是两列数据相互比较
SELECT * FROM emp
WHERE sal < comm;

-- where子句中作为条件的列可以不出现在select后面,但是这样的语句结果不够直观
SELECT ename,job,deptno FROM emp
WHERE sal <= 1500;

/*
where子句中比较运算符的两端数据类型必须一致
如果是其他数据库,数据类型不一致时会直接报错
mysql由于是弱数据类型的语言,所以不会报错,只是这样的语句没有意义
*/
SELECT * FROM emp
WHERE ename > 2;

-- 如果没有数据满足条件,则一行数据都没有
SELECT * FROM emp
WHERE deptno > 200;

-- 如果有满足条件的数据,至少会返回一行,只是可能数据的值是空值
SELECT comm FROM emp
WHERE ename = 'SMITH';

2.常用的特殊比较运算

-- in(value1,value,2...valueN), 列表匹配
SELECT * FROM emp
WHERE job IN ('MANAGER','CLERK','PRESIDENT');

-- between 最小值 and 最大值,范围匹配,最大值和最小值的位置不能变
SELECT * FROM emp
WHERE sal BETWEEN 1500 AND 3000;

/*
like, 模糊匹配(对字符)
通配符,可以匹配或者代表其他字符的特殊符号
 _ 表示1个任意字符
 % 表示任意个任意字符,包括0个1个和多个
*/
SELECT * FROM emp
WHERE ename LIKE 'S%';

SELECT * FROM emp
WHERE ename LIKE '%S';

SELECT * FROM emp
WHERE ename LIKE '%A%';

SELECT * FROM emp
WHERE ename LIKE '_A%';

SELECT * FROM emp
WHERE ename LIKE '_____';

-- is null, 匹配空值(不能写成 =null)
SELECT * FROM emp
WHERE comm IS NULL;

3.逻辑运算

-- and 与运算,所有的条件都要满足才能返回结果
SELECT * FROM emp
WHERE deptno = 20
AND sal > 2000;
-- or 或运算,多个条件满足任意一个就能返回结果
SELECT * FROM emp
WHERE deptno = 20
OR sal > 2000;
-- not 非运算,返回不满足条件的结果
SELECT * FROM emp
WHERE NOT sal > 2000;
-- 如果是数学符号的比较运算,not必须写在最前面
-- 如果是英文的比较运算,not可以写在最前也可以写在运算符中间
SELECT * FROM emp
WHERE deptno NOT IN (10,20);

4.运算优先级:数学运算>比较运算>NOT>AND>OR

-- 可以使用括号改变运算优先级
SELECT * FROM emp
WHERE deptno = 20
OR sal > 2000
AND job IN ('MANAGER','CLERK');

SELECT * FROM emp
WHERE (deptno = 20
OR sal > 2000)
AND job IN ('MANAGER','CLERK');

5.排序ORDER BY子句

/*
order by也在查询语句的后面,但是在limit之前
asc 表示升序排列,默认可以不写
desc 表示降序排列
*/
SELECT * FROM emp
ORDER BY sal ASC;

-- 所有的数据类型都可以排序
SELECT * FROM emp
WHERE deptno = 20
ORDER BY hiredate DESC;

SELECT * FROM emp
ORDER BY ename;

-- 可以使用别名排序
SELECT *,12*sal nianxin FROM emp
ORDER BY nianxin DESC;

-- 多列排序
SELECT * FROM emp
ORDER BY deptno,sal DESC;
-- 多列排序时,有重复数据的列写在前面

-- 查询工资排名前三的员工信息
SELECT * FROM emp
ORDER BY sal DESC
LIMIT 3;

 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值