select * from emp
select * from dept
select * from job
select * from salarygrade
-- 1.查询所有员工信息。查询员工编号,员工姓名,工资,职务名称,职务描述
SELECT
t1.mgr,
t1.ename,
t1.salary,
t2.jname,
t2.description
FROM
emp AS t1,
job AS t2
WHERE
t1.job_id = t2.id
-- 2.查询员工编号,员工姓名,工资,职务名称,职务描述,部门名称,部门位置
SELECT
t1.ename,
t1.salary,
t2.jname,
t2.description,
t3.dname,
t3.loc
FROM
emp AS t1,
job AS t2,
dept AS t3
WHERE
t1.job_id = t2.id and
t1.dept_id = t3.id
-- 3.查询员工姓名,工资,工资等级
SELECT
t1.ename,
t1.salary,
t2.grade
FROM
emp AS t1,
salarygrade as t2
where t1.salary BETWEEN t2.losalary and hisalary
-- 4.查询员工姓名,工资,职务名称,职务描述,部门名称,部门位置,工资等级
SELECT
t1.ename,
t1.salary,
t2.jname,
t2.description,
t3.dname,
t3.loc,
t4.grade
FROM
emp AS t1,
job AS t2,
dept AS t3,
salarygrade as t4
WHERE
t1.job_id = t2.id
and
t1.dept_id = t3.id
and t1.salary BETWEEN t4.losalary and t4.hisalary
-- 5.查询出部门编号、部门名称、部门位置、部门人数
SELECT
t1.*, COUNT(t2.id) 部门人数
FROM
dept AS t1,
emp AS t2
WHERE
t2.dept_id = t1.id
GROUP BY
t2.dept_id
SELECT dept.*,t1.num
from dept,(select dept_id,COUNT(*) num from emp GROUP BY dept_id) t1
where t1.dept_id = dept.id
SQL总结:
********************************************************************************
1.ddl语句: 操作数据库或表
//创建数据库
create Database if not 数据库名称;
//删除数据库
drop database if exists 数据库名称
//使用数据库
use 数据库名称
//查看数据库
show database
//查看当前使用的数据库
select database()
---------------------------------------------------------------------
//查询该数据库下的所有表
select tables
//查询表结构
desc 表的名称
//创建表
create table 表的名称(字段1名称 数据类型 约束 ,
字段2名称 数据类型 约束,
字段3名称 数据类型 约束
)
//删除表
drop table if exists 表的名称
//修改表的名称
alter table 表的名称 rename to 新的表名
//添加列
alter table 表的名称 add 列名 数据类型;
//修改列的数据类型
alter table 表的名称 modify 列名 新的数据类型;
//修改列的名称以及数据类型
alter table 表的名称 change 列名 新列名 新数据类型
//删除列
alter table 表的名称 drop 列名 ;
********************************************************************************
2.dml语句:对数据进行操作
//添加数据【指定列添加】
insert into 表的名称 (字段名1,字段名2,字段名3,……)
values(字段名1值,字段名2值,字段名3值,……)
//添加数据【给全部列添加数据】
insert into 表的名称 values(字段名1值,字段名2值,字段名3值,……)
//添加数据【给全部列添加数据,多条数据同时添加】
insert into 表的名称 values(字段名1值,字段名2值,字段名3值,……),
(字段名1值,字段名2值,字段名3值,……),
(字段名1值,字段名2值,字段名3值,……);
//修改数据【指定列修改】
update 表的名称 set 列名1=值1,列名2=值2,列名3=值3,……
where 条件【不指定条件就会将所有行的数据全部更改】
//删除数据
delete from 表的名称 where 条件【不指定条件就会将所有行的数据删除】
********************************************************************************
3.dql语句:数据库查询语言
①select from 查询
②distinct 去重
③as 别名
④条件{
> 大于
>= 大于或等于
!= / <> 不等
< 小于
<= 小于或等于
between …… and …… 在……范围内
in() 多选一
like 模糊查询【_代表单个任意字符 %代表多个任意字符】
is null/is not null 不为空
and /&& 和
or /|| 或
not/! 非
}
⑤排序 order by 【ASC升序 DESC降序】
⑥聚合函数{
count() 统计数量【不统计为null的列】
max() 最大值
min() 最小值
sum() 求和
avg() 平均值
}
⑦分组 group by
⑧分组后限定条件 having
⑨分组前的限定条件 where
⑩分页查询 limit 起始索引 , 查询条目数;
********************************************************************************
4.dcl:数据控制语言
grant 授权
set 设置
@@autocommit 自动提交事务
begin 开启事务
commit 提交事务
rollback 回滚事务
事务的四大特征:AICO 原子性【要么同时成功,要么都失败】
一致性【数据总量不变】
隔离性【开启多个事务查询数据】
持久性【通过commit提交或rollback回滚实现数据更新】
默认自动提加事务【要手动提交事务方法--》set @@autocommit =0 默认是1】
一旦设置为手动提交事务则必须自主提交,不然数据无法更新
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
多表查询:
1.内连接 inner join on 【inner可以不写】
2.外连接 left join【左连接:查询左表的全部数据以及与右表交集部分数据】
right join【右连接:查询右表的全部数据以及与右表交集部分数据】
3.子查询 =(子查询语句【子查询语句输出的是单列单行数据时使用=】)
in(子查询语句【子查询语句输出的是单列多行数据时使用in】)
约束:
1.非空约束 not null
2.唯一约束[自动添加] unique [auto_increment]
3.主键约束 primary key
4.默认约束 default
5.外键约束 constraint 外键名称 foreign key(外键字段名) references 主表名(主表列名)
数据库设计:
1.一对一
【例如:用户 和 用户详情
一对一关系多用于表拆分,将一个实体中经常使用的字段放一张表,
不经常使用的字段放另一张表,用于提升查询性能】
实现方式:
在任意一方加入外键,关联另一方主键,并且设置外键为唯一(UNIQUE)
2.一对多
【例如:部门 和 员工
一个部门对应多个员工,一个员工对应一个部门】
实现方式:
在多的一方建立外键,指向一的一方的主键
3.多对多
【例如:商品 和 订单
一个商品对应多个订单,一个订单包含多个商品】
实现方式:
建立第三张中间表,中间表至少包含两个外键,分别关联两方主键