2.7显示表结构
- 话不多说上写法
DESCRIBE employees; #其中employees是表名,其作用是显示了表中字段详细信息
DESC employees; #两者效果一致
2.8、使用where语句去过滤数据
- 比如现在有以下诉求:查询90号部门下的所有员工信息
- 写法如下:
SELECT *
FROM employees #语句执行到这块的时候就是查询了表中所有的相关字段
WHERE employee_id = 90; #这块使用WHERE语句去过滤不需要查询的数据,就能得出我们需要查询的数据,这个条件可以由我们自己去设置
- 现在我还有一个诉求就是想查询 last_name为'King'的员工信息
- 写法如下:
SELECT *
FROM employees # 语句执行,查询employees表中的字段
WHERE last_name = 'King'; # 此为诉求中指定的条件,由此可见也能指定表中的具体字段进行查询
2.9、基本SELECT语句的课后练习
#题目1:查询员工12个月工资的总和,并起别名为ANNUAL SALARY,写法如下:
SELECT employee_id ,last_name,
salary * 12 AS "ANNUAL SALARY"
FROM employees;
#题目2:查询employees表中去除重复的job_id以后的数据,写法如下:
SELECT DISTINCT job_id
FROM employees;
#题目三:查询工资大于12000的员工姓名和部门号,写法如下:
SELECT employee_id ,last_name
FROM employees
WHERE salary>12000;
#题目四:查询员工号为176的员工姓名和部门号
SELECT last_name,employee_id
FROM employees
WHERE employee_id = 176;
#第五题:显示表departments 的结构,并查询其中的全部数据
DESC departments;
SELECT * FROM departments;
3、运算符
3.1、算数运算符
- 就是简单的加减乘除,这块就不演示了
3.2、比较运算符
- 比较运算符用来对表达式左边操作数和右边的操作数进行比较,比较的结果为真则返回1,比较的结果为假则返回0,其他情况返回NULL;比较运算符经常被用来作为SELECT查询语句的条件来使用,返回符合条件的结果记录;
- = <=> <> != < <= > >= ;分别是等于,安全等于,不等于,小于,小于等与,大于,大于等于,举例如下:
SELECT 1 = 2,1!=2,1='1',1='a',0='a'
FROM DUAL; #字符串存在隐式转换,如果隐式转换不成功则看做是0
SELECT 'a' ='a','ab' ='ab','a' = 'b'
FROM DUAL; #两边都是字符串的话,则按照ANST的比较规则来比较
- <=> (意为安全等于,就是为NULL而生的)
- 为什么这么说呢,因为其他的运算符只要有NULL参与进来结果都是为NULL
- 但有了这个符号,我们就可以利用这个符号去判断有NULL的情况
- 实际场景中表中肯定会有NULL的数据,我们也需要这个符号去查询有关于NULL的数据
- 比如呢?比如我想查询表中commisssion_pct为NULL的数据,那么,写法如下:
SELECT *
FROM employees
WHERE commission_pct <=> null; #加上此运算符就可以查出employees表中数据commission——pct字段为NULL的数据了
- IS NULL \ IS NOT NULL \ ISNULL
- 以上对三个关键字进行解读,IS NULL 就是查询为空的数据,作用与<=>作用一致
SELECT *
FROM employees
WHERE commission_pct IS NULL; # 作用也是查询表的commission_pct字段中为NULL的数据
- IS NOT NULL 则跟他相反,即查询不为空的数据;
SELECT *
FROM employees
WHERE commission_pct IS NOT NULL; #作用就是查询employees表中数据commission_pct字段不为NULL的数据
- ISNULL则与<=> 、 IS NULL的作用相同,都是表示为空的,但是与之不同的地方是,ISNULL更像是一个方法
SELECT *
FROM employees
WHERE ISNULL(commission_pct); #作用与IS NULL和<=>的作用一致,但ISNULL更像是一种函数(方法)
- 防止绕晕!!!!!当需求是要求查询为空的时候,就使用IS NULL ,反之,需要查询不为空的时候,就使用IS NOT NULL;
- LEAST() \ GREATEST 即最大和最小值,写法为:
- GREATEST则和它相反
SELECT LEAST(first_name,last_name),LEAST(LENGTH(first_name),LENGTH(last_name))
FROM employees; #意为比较两边字符串哪边更短,后面函数的时候会具体讲到
- BETWEEN (条件一) AND (条件二) (查询条件一和条件二范围内的数据,注意这块是包含边界的数据)
- 实际应用场景:查询工资在6000到八千之间的员工信息;写法如下:
SELECT employee_id,last_name,salary
FROM employees
WHERE salary BETWEEN 6000 AND 8000; #BETWEEN意为查询工资6000到八千的区间信息
- 当然,使用逻辑运算符来表示也是可以的,逻辑运算符的写法如下:
SELECT empkoyee_id,last_name,salary
FROM employees
WHERE salary >=6000 && salary<=8000; #这块的作用跟BETWEEN的作用是一样的
- 但还有一种场景,就是当把6000和八千互换位置时,数据表是查不到任何数据的
所以由此得出结论,6000的位置是上界标,8000的位置是下界标,可以理解为上限或者下限,所以交换了他们的位置变查询不到
还有一种实际场景:查询工资不在6000到8000的员工信息,写法如下:
SELECT last_name,employee_id,salary
FROM employees
WHERE salary NOT BETWEEN salary 8000; #即在BETWEEN前加上关键字NOT就可以实现该需求
SELECT last_name,employee_id,salary
FROM employees
WHERE salary < 6000 OR salary > 8000; #当然使用or关键字也能实现同样的效果
- IN / NOT IN (与BETWEEN不同的是,BETWEEN表示的是一种范围,而IN和NOT IN 表示的是一种零散的数值
- 实际场景:查询部门为10、20、30的员工信息,根据题目需求,得出这块要用到 IN ,写法如下:
SELECT department_id,last_name,salary
FROM employees
WHERE department_id IN (10,20,30) #其中需要查询的数据需放入括号中否则就会报错
SELECT last_name,salary,department_id
FROM employees
WHERE department_id = 10 OR department_id = 20 OR department_id =30; #两种写法的作用一致,但不可直接用OR拼接
- 实际场景:查询工资不是6000,7000,8000的员工信息,写法如下:
SELECT last_name,department_id,salary
FROM employees
WHERE salary NOT IN (6000,7000,8000); #NOT IN 即不在,和IN的作用是相反的
- LIKE ,模糊查询,当你只记得表中某一字段或者某一字母的时候,就可以使用模糊查询
- 实际场景:查询last_name中包含'a'的员工信息;写法如下
SELECT last_name, salary,department_id
FROM employees
WHERE last_name LIKE '%a%'; #其中%代表不确定个数的字符,即字符a前有0个或多个字符,a后面也有0个或多个字符
- 以上是单个字符查询,现在还有一种需求是要查询包含字符 'a' 且包含字符 'e'的数据,写法如下:
SELECT last_name
FROM employees
WHERE last_name LIKE '%a%' AND last_name LIKE '%e%'; #这样写查出来的数据就包含字符'a'且包含字符'e'
- 还有一种场景即查询员工表中第二个字符是 'a'的数据,写法如下:
SELECT last_name
FROM employees
WHERE last_name LIKE '_a%'; # _ :的作用是表示一个不确定的字符,用此符号可表示指定位置,有点不清楚,再举例
- 查询员工表数据中第三个字符是 'a' 的数据,写法如下:
SELECT last_name
FROM employees
WHERE last_name LIKE '__a%' #加上一个下划线表示第二个字符,查询第三个字符就多加上一个下划线,表示第三个字符带a的数据
- 查询员工表中第二个字符是 _ 且第三个字符是 'a' 的员工信息,这个时候我们就需要用到转义字符,写法如下:
SELECT last_name
FROM employees
WHERE last_name LIKE '_\_a%'; #此处使用转义字符即可转义,因为需求中是明确第二个字符为下划线,所以需要转义后才能使用
- REGEXP \ RLIKE : 正则表达式,正则表达式就不再是模糊查询,而是精确到某一位置 '^' 则表示头,'$'则表示尾,举例如下:
SELECT last_name
FROM employees
WHERE last_name RLIKE '^a'; #以a字符开头,注:要带上关键字RLIKE
SELECT last_name
FROM employees
WHERE last_name RLIKE 'a$' #以a字符结尾的数据
SELECT last_name
FROM employees
WHERE last_name RLIKE 'a' #即包含字符a的数据