数据库中的相关概念
-
库:数据库,内部存放着所有的表、视图、索引等内容
-
表:是数据库存储数据的基本单位,由行和列组成
-
列:又称为字段,是表的基本组成单位,相当于Java类中的属性
-
行:是表的基本组成单位,具体数据,每行信息是一个整体,由固定字段构成。相当于Java中由类实例化出来的一个又一个的对象
SQL
- SQL:结构化查询语言,提供了对数据库数据的增删改查操作对应的处理
SQL是一种规范,也是一种国际标准,所有的关系型数据库都支持SQL,不被MySQL独有
特点
-
不区分大小写
-
注释:
-
单行:-- (--空格)
-
多行:/* */
-
简单查询
查询所有字段
-- 查询所有列:select * from 表名(*:是通配符,表示所有列) select * from employees
查询部分字段
select 列名1,列名2,... from 表名
-
也可以通过列出所有字段名的方式查询所有字段
-
优点:
-
效率更快
-
可读性较好
-
可维护性较高
-
-
缺点:
- 书写繁琐
-
-- 查询所有字段
SELECT * from employees
-- 查询员工id、员工工资
select employee_id,salary from employees
-- 列出所有字段名查询所有字段
select employee_id,salary,first_name,last_name,email,phone_number,job_id,commission_pct,manager_id,department_id,hiredate from employees
结果运算
+、-、*、/、%
select 列名 运算符 值 from 表名
-- 查询员工id和工资,及对工资进行加减乘除的运算
select employee_id,salary,salary+100,salary-100,salary*100,salary/100,salary%100 from employees
别名
- 对查询之后的结果起别名
select 列名 as 别名,列名 as 别名,列名,... from 表名
-
别名可以省略单引号
标准SQL中没有双引号,字符串通过单引号修饰
-
as关键字可省
-- 查看员工id和员工工资
select employee_id as 员工id,salary as 工资 from employees
-- as关键字可省
select employee_id 员工id,salary 工资 from employees
去重
select distinct 列名1,列名2,.. from 表名
-- 查询所有的职位id(根据job_id进行去重)
select distinct job_id from employees
-- 查询所有的职位和部门id(根据job_id和department_id去重)
select distinct job_id,department_id from employees
当去重规则为多个字段时,只有当多个字段的值都相同时才会去重
分支-case when
case
when 条件1 then 结果1
when 条件2 then 结果2
...
else 其他结果
end
-- 满足when中的条件,便执行对应then中的结果,如果when都不满足,则最终执行else,从上往下判断
-- 查询员工id、员工工资、工资等级(工资>=15000 高薪,工资>=10000 中薪,工资>=5000 一般,工资<5000 低薪)
select employee_id 员工id,salary 员工工资,
case
when salary>=15000 then '高薪'
when salary>=10000 then '中薪'
when salary>=5000 then '一般'
else '低薪'
end as 薪资等级
from employees
查看表详情
- 表详情:当前表的字段设计
describe 表名-- describe关键字可以简写为desc
-- 查看员工表详情
describe employees
desc employees
条件查询
-
能够支持的关系运算符:> < >= <= != =
单条件查询
select 列名... from 表名 where 筛选条件
-
MySQL中对比字符串时默认不区分大小写,若想区分,则在对应字段前添加binary关键字即可
-- 查询工资大于10000的员工信息
select * from employees where salary>10000
-- 查询部门id<50的员工信息
select * from employees where department_id<50
-- 查询起始名为Steven的员工信息-不区分大小写
select * from employees where first_name='steven'
-- 区分大小写
select * from employees where binary first_name='Steven'
多条件查询
where 条件1 连接符 条件2
连接符:
and:表示并且,意为同时满足,相当于Java中的&&
or:表示或者,意为满足任意一个即可,相当于Java中的||
-- 查询员工工资>10000并且部门id<50的员工信息
select * from employees where salary>10000 and department_id<50
-- 查询员工id<120或者部门id=80的员工信息
select * from employees where employee_id<120 or department_id=80
区间查询
where 列名 [not] between 起始值 and 结束值
-
中括号中的内容意为可省
-
加上not表示不在此区间之内
-- 查询工资大于10000并且小于12000的员工信息
select * from employees where salary>=10000 and salary<=12000
-- 区间查询(在范围内):between 起始值 and 结束值
select * from employees where salary between 10000 and 12000
-- 区间查询(不在范围内):not between 起始值 and 结束值
select * from employees where salary not between 10000 and 12000
枚举查询
where 列名 [not] in(值1,值2,...)
-- 查询部门id是10、20、30的员工信息
select * from employees where department_id=10 or department_id=20 or department_id=30
-- 枚举查询(列举字段所有满足条件的值):列名 in(值1,值2,...)
select * from employees where department_id in(10,20,30)
-- 不在范围内:列名 not in(值1,...)
select * from employees where department_id not in(10,20,30)
空值查询
where 列名 is [not] null
-- 查询没有绩效的员工信息
-- 为空:列名 is null
select * from employees where commission_pct is null
-- 不为空:列名 is not null
select * from employees where commission_pct is not null
模糊查询
where 列名 [not] like '通配模式' 可用占位符: %:表示n个字符 _:表示1个字符
-- 查询起始名以p开头的员工信息
select * from employees where first_name like 'p%'
-- 查询起始名中包含p的员工信息
select * from employees where first_name like '%p%'
-- 查询起始名第二个字母是a的员工信息
select * from employees where first_name like '_a%'
-- 查询起始名由5个字母组成的员工信息
select * from employees where first_name like '_____'