回顾
#查询select * from 表明;select 字段1 as "别名1",字段2 as “别名2” from 表明;查询后面可以加条件where 往运算符靠 > >= < <= != and(&&) or(||)where 字段 运算符 值order by 必须写在where后面 desc降 asc升limit 限制#内置函数#一般放在select和from中间max min avg sum count(*)#嵌套语句#一个sql语句的结果,当成另一个sql语句的条件来使用#模糊查询where 字段 like “%%”#分组group by 用分组一定要注意 select和from 中间的显示数据分组之后还有条件用having#数据约束dafaule 默认值not null 非空unique 唯一primary key 主键auto_increment 自增#外键的约束加级联操作 一定是有两张表#部门表 主表create table dept(-> id int primary key auto_increment,-> deptName varchar(32) not null);#员工表 从表mysql> create table employee(-> id int primary key auto_increment,-> empName varchar(32) not null,-> deptId int not null,-> regTime timestamp default current_timestamp,-> constraint fk_emp_dept foreign key(deptId) references dept(id)-> on delete cascade-> on update cascade-> );
一、链表查询【重点】
1.1常规的链表查询
#两张表或者多张表来查询出来想要的数据 java2204 dept employee#链表查询:select employee.empName,dept.deptNamefrom dept,employeewhere employee.deptId = dept.id;select employee.empName,dept.deptNamefrom dept,employeewhere employee.deptId = dept.id and empName = "博儿";
1.2内连接和外连接
1.2.1内连接
只是换一种写法,意思都一样
关键字 inner join on
语法格式,where 需要的时候写
select 字段1,字段2 from 表1 inner join 表2 on 约束条件 where 其他条件
1.2.2外连接【很少用】
左外连接 :左边表全部显示,去匹配右边表,没有就显示null
#select 字段 from 表1 left outer join 表2 on 约束条件select * from dept d left outer join employee e on d.id = e.deptId;
右外连接:右边表全部显示,去匹配左边的表,没有的就显示null
#select 字段 from 表1 right outer join 表2 on 约束条件select * from employee e right outer join dept d on d.id = e.deptId;
二、开发级别的东西
2.1一对多或多对一的查询
#场景:老师和学生 要求一个学生对应一个老师#一个老师对应多个学生,一个学生对应一个老师
2.2多对多的查询
#场景#一个学生选多个课程#一个课程被多个学生选择#表1mysql> select * from stu;+----+-----------+| id | stuName |+----+-----------+| 1 | 朱志伟 || 2 | 朱航 || 3 | 谷小天 || 4 | 张桂园 || 5 | 博儿 |+----+-----------+#表2mysql> select * from course;+----+------------+| id | courseName |+----+------------+| 1 | java || 2 | Python || 3 | C++ |+----+------------+#表3mysql> select * from stu_course;+----+------+------+| id | sid | cid |+----+------+------+| 1 | 1 | 1 || 2 | 1 | 2 || 3 | 2 | 2 || 4 | 2 | 3 || 5 | 3 | 3 || 6 | 3 | 1 || 7 | 4 | 1 || 8 | 4 | 2 || 9 | 5 | 2 || 10 | 5 | 3 |+----+------+------+
开始查询
#查看朱志伟选择了那些课程#需要展示什么,id 名字 课程#从 stu course stu_course 中查select s.id,s.stuName,c.courseName-> from stu s,stu_course s_c,course c-> where s.id = s_c.sid and s_c.cid = c.id and s.stuName = "博儿";+----+---------+------------+| id | stuName | courseName |+----+---------+------------+| 5 | 博儿 | Python || 5 | 博儿 | C++ |+----+---------+------------+2 rows in set (0.00 sec)mysql> select s.id,s.stuName,c.courseName-> from stu s-> inner join stu_course s_c-> on s.id = s_c.sid-> inner join course c-> on s_c.cid = c.id-> where s.stuName = "博儿";+----+---------+------------+| id | stuName | courseName |+----+---------+------------+| 5 | 博儿 | Python || 5 | 博儿 | C++ |+----+---------+------------+2 rows in set (0.00 sec)#java被谁选择了select *-> from course c-> inner join stu_course s_c-> on c.id = s_c.cid-> inner join stu s-> on s_c.sid = s.id-> where c.courseName = "java";select *-> from course c-> inner join stu_course s_c-> inner join stu s-> on c.id = s_c.cid and s_c.sid = s.id-> where c.courseName = "java";
3.扩展
mysql> select * from user;+----+--------+--------+| id | name | roleId |+----+--------+--------+| 1 | 老邢 | 1 || 2 | 骚磊 | 2 || 3 | 帅东 | 2 |+----+--------+--------+3 rows in set (0.00 sec)mysql> select * from role;+----+--------------+| id | roleName |+----+--------------+| 1 | 管理员 || 2 | 普通用户 |+----+--------------+2 rows in set (0.00 sec)mysql> select * from privilege;+----+--------------------+| id | pName |+----+--------------------+| 1 | 删除用户 || 2 | 修改用户 || 3 | 添加用户 || 4 | 查看指定用户 || 5 | 查看所有用户 |+----+--------------------+5 rows in set (0.00 sec)mysql> select * from role_privilege;+----+------+------+| id | rid | pid |+----+------+------+| 1 | 1 | 1 || 2 | 1 | 2 || 3 | 1 | 3 || 4 | 1 | 4 || 5 | 1 | 5 || 6 | 2 | 2 || 7 | 2 | 4 |+----+------+------+7 rows in set (0.00 sec)
开始查询
mysql> select u.id,u.name,r.roleName,p.pName-> from user u-> inner join role r-> inner join role_privilege r_p-> inner join privilege p-> on u.id = r.id and r.id = r_p.rid and r_p.pid = p.id-> where u.name = "老邢";+----+--------+-----------+--------------------+| id | name | roleName | pName |+----+--------+-----------+--------------------+| 1 | 老邢 | 管理员 | 删除用户 || 1 | 老邢 | 管理员 | 修改用户 || 1 | 老邢 | 管理员 | 添加用户 || 1 | 老邢 | 管理员 | 查看指定用户 || 1 | 老邢 | 管理员 | 查看所有用户 |+----+--------+-----------+--------------------+
4.SQL权限管理
可以把自己的数据设置权限,别人可以进行访问,同一局域网或者添加到云服务器
项目经理必须要会的这些东西
三、SQL语言分类【归纳总结】【重点】
1.数据库查询语言 DQLselect2.数据库定义语言 DDL创建库 创建表 修改表 等3.数据库操作语言 DML增insert into 删 deoete 改 update4.数据可事务语言 DTL事务开启 set autocommit = 0rollback; 回滚commit; 执行5.数据可控制语言 DCL权限控制(还没将)
四、安装可视化工具
navicat 百度,工作中用这个
SQLyog 讲这个
五、试图【了解】
1.试图的概述
……百度!!!!!
2.创建试图
2.1入门
mysql> select Insert_priv from mysql.user where user="root";+-------------+| Insert_priv |+-------------+| Y |+-------------+1 row in set (0.00 sec)mysql> select Create_view_priv from mysql.user where user="root";+------------------+| Create_view_priv |+------------------+| Y |+------------------+1 row in set (0.00 sec)
2.2创建试图
MySQL中,创建试图是通过create view语句实现的
语法格式
create view 试图名字 as select 语句
示例:创建试图
#创建试图create view t_user as select id,name, from user;mysql> select * from t_user;+----+--------+| id | name |+----+--------+| 1 | 老邢 || 2 | 骚磊 || 3 | 帅东 |+----+--------+#删除虚拟数据数据表中的数据,真正数据表中的也删除了mysql> delete from t_user where id = 3;Query OK, 1 row affected (0.13 sec)mysql> select * from user;+----+--------+--------+| id | name | roleId |+----+--------+--------+| 1 | 老邢 | 1 || 2 | 骚磊 | 2 |+----+--------+--------+2 rows in set (0.00 sec)#还可以给虚拟表中的字段起别名mysql> create view t_user1(a_id,a_name) as select id,name from user;Query OK, 0 rows affected (0.16 sec)mysql> select * from t_user1;+------+--------+| a_id | a_name |+------+--------+| 1 | 老邢 || 2 | 骚磊 |+------+--------+2 rows in set (0.00 sec)
2.3修改试图
mysql> select * from t_user1;+------+--------+| a_id | a_name |+------+--------+| 1 | 老邢 || 2 | 骚磊 |+------+--------+#修改试图alter view t_user1 as select id,name from t_user where id in(select id from t_user);mysql> select * from t_user1;+----+--------+| id | name |+----+--------+| 1 | 老邢 || 2 | 骚磊 |+----+--------+2 rows in set (0.00 sec)
2.4删除试图
#删除试图mysql> drop view t_user1;Query OK, 0 rows affected (0.00 sec)mysql> select * from t_user1;ERROR 1146 (42S02): Table 'java3.t_user1' doesn't exist
案例【了解层次】
员工
create table emp(-> id int primary key auto_increment,-> name varchar(32) not null,-> sex int,-> dept_code varchar(32), #部门编号-> is_post int #是否在职-> );
添加数据
mysql> insert into emp(name,sex,dept_code,is_post) values("a1",1,"1001",1);Query OK, 1 row affected (0.12 sec)
查询员工表
mysql> select * from emp;+----+------+------+-----------+---------+| id | name | sex | dept_code | is_post |+----+------+------+-----------+---------+| 1 | a1 | 1 | 1001 | 1 || 2 | a2 | 0 | 1002 | 1 || 3 | a3 | 1 | 1003 | 1 || 4 | a4 | 1 | 1001 | 0 || 5 | a5 | 1 | 1002 | 0 || 6 | a6 | 0 | 1003 | 1 || 7 | a7 | 1 | 1001 | 0 |+----+------+------+-----------+---------+
试图
mysql> create view t_emp as-> select id,name,if(sex=1,"男","女") as sex_name,case dept_code-> when "1001" then "研发部"-> when "1002" then "人事部"-> when "1003" then "财务部"-> else "其他"-> end as dept_name,if(is_post=1,"在职","离职") as is_post_name from emp;Query OK, 0 rows affected (0.13 sec)mysql> select * from t_emp;+----+------+----------+-----------+--------------+| id | name | sex_name | dept_name | is_post_name |+----+------+----------+-----------+--------------+| 1 | a1 | 男 | 研发部 | 在职 || 2 | a2 | 女 | 人事部 | 在职 || 3 | a3 | 男 | 财务部 | 在职 || 4 | a4 | 男 | 研发部 | 离职 || 5 | a5 | 男 | 人事部 | 离职 || 6 | a6 | 女 | 财务部 | 在职 || 7 | a7 | 男 | 研发部 | 离职 |+----+------+----------+-----------+--------------+7 rows in set (0.00 sec)
试图后的效果
mysql> select * from emp;+----+------+------+-----------+---------+| id | name | sex | dept_code | is_post |+----+------+------+-----------+---------+| 1 | a1 | 1 | 1001 | 1 || 2 | a2 | 0 | 1002 | 1 || 3 | a3 | 1 | 1003 | 1 || 4 | a4 | 1 | 1001 | 0 || 5 | a5 | 1 | 1002 | 0 || 6 | a6 | 0 | 1003 | 1 || 7 | a7 | 1 | 1001 | 0 |+----+------+------+-----------+---------+7 rows in set (0.00 sec)mysql> select * from t_emp;+----+------+----------+-----------+--------------+| id | name | sex_name | dept_name | is_post_name |+----+------+----------+-----------+--------------+| 1 | a1 | 男 | 研发部 | 在职 || 2 | a2 | 女 | 人事部 | 在职 || 3 | a3 | 男 | 财务部 | 在职 || 4 | a4 | 男 | 研发部 | 离职 || 5 | a5 | 男 | 人事部 | 离职 || 6 | a6 | 女 | 财务部 | 在职 || 7 | a7 | 男 | 研发部 | 离职 |+----+------+----------+-----------+--------------+7 rows in set (0.00 sec)
