回顾

  1. #查询
  2. select * from 表明;
  3. select 字段1 as "别名1",字段2 as “别名2 from 表明;
  4. 查询后面可以加条件
  5. where 往运算符靠 > >= < <= != and(&&) or(||)
  6. where 字段 运算符
  7. order by 必须写在where后面 desc asc
  8. limit 限制
  9. #内置函数
  10. #一般放在select和from中间
  11. max min avg sum count(*)
  12. #嵌套语句
  13. #一个sql语句的结果,当成另一个sql语句的条件来使用
  14. #模糊查询
  15. where 字段 like “%%”
  16. #分组
  17. group by 用分组一定要注意 selectfrom 中间的显示数据
  18. 分组之后还有条件用having
  19. #数据约束
  20. dafaule 默认值
  21. not null 非空
  22. unique 唯一
  23. primary key 主键
  24. auto_increment 自增
  25. #外键的约束加级联操作 一定是有两张表
  26. #部门表 主表
  27. create table dept(
  28. -> id int primary key auto_increment,
  29. -> deptName varchar(32) not null);
  30. #员工表 从表
  31. mysql> create table employee(
  32. -> id int primary key auto_increment,
  33. -> empName varchar(32) not null,
  34. -> deptId int not null,
  35. -> regTime timestamp default current_timestamp,
  36. -> constraint fk_emp_dept foreign key(deptId) references dept(id)
  37. -> on delete cascade
  38. -> on update cascade
  39. -> );

一、链表查询【重点】

1.1常规的链表查询

  1. #两张表或者多张表来查询出来想要的数据 java2204 dept employee
  2. #链表查询:
  3. select employee.empName,dept.deptName
  4. from dept,employee
  5. where employee.deptId = dept.id;
  6. select employee.empName,dept.deptName
  7. from dept,employee
  8. where employee.deptId = dept.id and empName = "博儿";

1.2内连接和外连接

1.2.1内连接

只是换一种写法,意思都一样

关键字 inner join on

语法格式,where 需要的时候写

  1. select 字段1,字段2 from 1 inner join 2 on 约束条件 where 其他条件

1.2.2外连接【很少用】

左外连接 :左边表全部显示,去匹配右边表,没有就显示null

  1. #select 字段 from 表1 left outer join 表2 on 约束条件
  2. select * from dept d left outer join employee e on d.id = e.deptId;

右外连接:右边表全部显示,去匹配左边的表,没有的就显示null

  1. #select 字段 from 表1 right outer join 表2 on 约束条件
  2. select * from employee e right outer join dept d on d.id = e.deptId;

二、开发级别的东西

2.1一对多或多对一的查询

  1. #场景:老师和学生 要求一个学生对应一个老师
  2. #一个老师对应多个学生,一个学生对应一个老师

2.2多对多的查询

  1. #场景
  2. #一个学生选多个课程
  3. #一个课程被多个学生选择
  4. #表1
  5. mysql> select * from stu;
  6. +----+-----------+
  7. | id | stuName |
  8. +----+-----------+
  9. | 1 | 朱志伟 |
  10. | 2 | 朱航 |
  11. | 3 | 谷小天 |
  12. | 4 | 张桂园 |
  13. | 5 | 博儿 |
  14. +----+-----------+
  15. #表2
  16. mysql> select * from course;
  17. +----+------------+
  18. | id | courseName |
  19. +----+------------+
  20. | 1 | java |
  21. | 2 | Python |
  22. | 3 | C++ |
  23. +----+------------+
  24. #表3
  25. mysql> select * from stu_course;
  26. +----+------+------+
  27. | id | sid | cid |
  28. +----+------+------+
  29. | 1 | 1 | 1 |
  30. | 2 | 1 | 2 |
  31. | 3 | 2 | 2 |
  32. | 4 | 2 | 3 |
  33. | 5 | 3 | 3 |
  34. | 6 | 3 | 1 |
  35. | 7 | 4 | 1 |
  36. | 8 | 4 | 2 |
  37. | 9 | 5 | 2 |
  38. | 10 | 5 | 3 |
  39. +----+------+------+

开始查询

  1. #查看朱志伟选择了那些课程
  2. #需要展示什么,id 名字 课程
  3. #从 stu course stu_course 中查
  4. select s.id,s.stuName,c.courseName
  5. -> from stu s,stu_course s_c,course c
  6. -> where s.id = s_c.sid and s_c.cid = c.id and s.stuName = "博儿";
  7. +----+---------+------------+
  8. | id | stuName | courseName |
  9. +----+---------+------------+
  10. | 5 | 博儿 | Python |
  11. | 5 | 博儿 | C++ |
  12. +----+---------+------------+
  13. 2 rows in set (0.00 sec)
  14. mysql> select s.id,s.stuName,c.courseName
  15. -> from stu s
  16. -> inner join stu_course s_c
  17. -> on s.id = s_c.sid
  18. -> inner join course c
  19. -> on s_c.cid = c.id
  20. -> where s.stuName = "博儿";
  21. +----+---------+------------+
  22. | id | stuName | courseName |
  23. +----+---------+------------+
  24. | 5 | 博儿 | Python |
  25. | 5 | 博儿 | C++ |
  26. +----+---------+------------+
  27. 2 rows in set (0.00 sec)
  28. #java被谁选择了
  29. select *
  30. -> from course c
  31. -> inner join stu_course s_c
  32. -> on c.id = s_c.cid
  33. -> inner join stu s
  34. -> on s_c.sid = s.id
  35. -> where c.courseName = "java";
  36. select *
  37. -> from course c
  38. -> inner join stu_course s_c
  39. -> inner join stu s
  40. -> on c.id = s_c.cid and s_c.sid = s.id
  41. -> where c.courseName = "java";

3.扩展

  1. mysql> select * from user;
  2. +----+--------+--------+
  3. | id | name | roleId |
  4. +----+--------+--------+
  5. | 1 | 老邢 | 1 |
  6. | 2 | 骚磊 | 2 |
  7. | 3 | 帅东 | 2 |
  8. +----+--------+--------+
  9. 3 rows in set (0.00 sec)
  10. mysql> select * from role;
  11. +----+--------------+
  12. | id | roleName |
  13. +----+--------------+
  14. | 1 | 管理员 |
  15. | 2 | 普通用户 |
  16. +----+--------------+
  17. 2 rows in set (0.00 sec)
  18. mysql> select * from privilege;
  19. +----+--------------------+
  20. | id | pName |
  21. +----+--------------------+
  22. | 1 | 删除用户 |
  23. | 2 | 修改用户 |
  24. | 3 | 添加用户 |
  25. | 4 | 查看指定用户 |
  26. | 5 | 查看所有用户 |
  27. +----+--------------------+
  28. 5 rows in set (0.00 sec)
  29. mysql> select * from role_privilege;
  30. +----+------+------+
  31. | id | rid | pid |
  32. +----+------+------+
  33. | 1 | 1 | 1 |
  34. | 2 | 1 | 2 |
  35. | 3 | 1 | 3 |
  36. | 4 | 1 | 4 |
  37. | 5 | 1 | 5 |
  38. | 6 | 2 | 2 |
  39. | 7 | 2 | 4 |
  40. +----+------+------+
  41. 7 rows in set (0.00 sec)

开始查询

  1. mysql> select u.id,u.name,r.roleName,p.pName
  2. -> from user u
  3. -> inner join role r
  4. -> inner join role_privilege r_p
  5. -> inner join privilege p
  6. -> on u.id = r.id and r.id = r_p.rid and r_p.pid = p.id
  7. -> where u.name = "老邢";
  8. +----+--------+-----------+--------------------+
  9. | id | name | roleName | pName |
  10. +----+--------+-----------+--------------------+
  11. | 1 | 老邢 | 管理员 | 删除用户 |
  12. | 1 | 老邢 | 管理员 | 修改用户 |
  13. | 1 | 老邢 | 管理员 | 添加用户 |
  14. | 1 | 老邢 | 管理员 | 查看指定用户 |
  15. | 1 | 老邢 | 管理员 | 查看所有用户 |
  16. +----+--------+-----------+--------------------+

4.SQL权限管理

可以把自己的数据设置权限,别人可以进行访问,同一局域网或者添加到云服务器

项目经理必须要会的这些东西

三、SQL语言分类【归纳总结】【重点】

  1. 1.数据库查询语言 DQL
  2. select
  3. 2.数据库定义语言 DDL
  4. 创建库 创建表 修改表
  5. 3.数据库操作语言 DML
  6. insert into deoete update
  7. 4.数据可事务语言 DTL
  8. 事务开启 set autocommit = 0
  9. rollback; 回滚
  10. commit; 执行
  11. 5.数据可控制语言 DCL
  12. 权限控制(还没将)

四、安装可视化工具

navicat 百度,工作中用这个

SQLyog 讲这个

五、试图【了解】

1.试图的概述

……百度!!!!!

2.创建试图

2.1入门

  1. mysql> select Insert_priv from mysql.user where user="root";
  2. +-------------+
  3. | Insert_priv |
  4. +-------------+
  5. | Y |
  6. +-------------+
  7. 1 row in set (0.00 sec)
  8. mysql> select Create_view_priv from mysql.user where user="root";
  9. +------------------+
  10. | Create_view_priv |
  11. +------------------+
  12. | Y |
  13. +------------------+
  14. 1 row in set (0.00 sec)

2.2创建试图

MySQL中,创建试图是通过create view语句实现的

语法格式

  1. create view 试图名字 as select 语句

示例:创建试图

  1. #创建试图
  2. create view t_user as select id,name, from user;
  3. mysql> select * from t_user;
  4. +----+--------+
  5. | id | name |
  6. +----+--------+
  7. | 1 | 老邢 |
  8. | 2 | 骚磊 |
  9. | 3 | 帅东 |
  10. +----+--------+
  11. #删除虚拟数据数据表中的数据,真正数据表中的也删除了
  12. mysql> delete from t_user where id = 3;
  13. Query OK, 1 row affected (0.13 sec)
  14. mysql> select * from user;
  15. +----+--------+--------+
  16. | id | name | roleId |
  17. +----+--------+--------+
  18. | 1 | 老邢 | 1 |
  19. | 2 | 骚磊 | 2 |
  20. +----+--------+--------+
  21. 2 rows in set (0.00 sec)
  22. #还可以给虚拟表中的字段起别名
  23. mysql> create view t_user1(a_id,a_name) as select id,name from user;
  24. Query OK, 0 rows affected (0.16 sec)
  25. mysql> select * from t_user1;
  26. +------+--------+
  27. | a_id | a_name |
  28. +------+--------+
  29. | 1 | 老邢 |
  30. | 2 | 骚磊 |
  31. +------+--------+
  32. 2 rows in set (0.00 sec)

2.3修改试图

  1. mysql> select * from t_user1;
  2. +------+--------+
  3. | a_id | a_name |
  4. +------+--------+
  5. | 1 | 老邢 |
  6. | 2 | 骚磊 |
  7. +------+--------+
  8. #修改试图
  9. alter view t_user1 as select id,name from t_user where id in(select id from t_user);
  10. mysql> select * from t_user1;
  11. +----+--------+
  12. | id | name |
  13. +----+--------+
  14. | 1 | 老邢 |
  15. | 2 | 骚磊 |
  16. +----+--------+
  17. 2 rows in set (0.00 sec)

2.4删除试图

  1. #删除试图
  2. mysql> drop view t_user1;
  3. Query OK, 0 rows affected (0.00 sec)
  4. mysql> select * from t_user1;
  5. ERROR 1146 (42S02): Table 'java3.t_user1' doesn't exist

案例【了解层次】

员工

  1. create table emp(
  2. -> id int primary key auto_increment,
  3. -> name varchar(32) not null,
  4. -> sex int,
  5. -> dept_code varchar(32), #部门编号
  6. -> is_post int #是否在职
  7. -> );

添加数据

  1. mysql> insert into emp(name,sex,dept_code,is_post) values("a1",1,"1001",1);
  2. Query OK, 1 row affected (0.12 sec)

查询员工表

  1. mysql> select * from emp;
  2. +----+------+------+-----------+---------+
  3. | id | name | sex | dept_code | is_post |
  4. +----+------+------+-----------+---------+
  5. | 1 | a1 | 1 | 1001 | 1 |
  6. | 2 | a2 | 0 | 1002 | 1 |
  7. | 3 | a3 | 1 | 1003 | 1 |
  8. | 4 | a4 | 1 | 1001 | 0 |
  9. | 5 | a5 | 1 | 1002 | 0 |
  10. | 6 | a6 | 0 | 1003 | 1 |
  11. | 7 | a7 | 1 | 1001 | 0 |
  12. +----+------+------+-----------+---------+

试图

  1. mysql> create view t_emp as
  2. -> select id,name,if(sex=1,"男","女") as sex_name,case dept_code
  3. -> when "1001" then "研发部"
  4. -> when "1002" then "人事部"
  5. -> when "1003" then "财务部"
  6. -> else "其他"
  7. -> end as dept_name,if(is_post=1,"在职","离职") as is_post_name from emp;
  8. Query OK, 0 rows affected (0.13 sec)
  9. mysql> select * from t_emp;
  10. +----+------+----------+-----------+--------------+
  11. | id | name | sex_name | dept_name | is_post_name |
  12. +----+------+----------+-----------+--------------+
  13. | 1 | a1 | | 研发部 | 在职 |
  14. | 2 | a2 | | 人事部 | 在职 |
  15. | 3 | a3 | | 财务部 | 在职 |
  16. | 4 | a4 | | 研发部 | 离职 |
  17. | 5 | a5 | | 人事部 | 离职 |
  18. | 6 | a6 | | 财务部 | 在职 |
  19. | 7 | a7 | | 研发部 | 离职 |
  20. +----+------+----------+-----------+--------------+
  21. 7 rows in set (0.00 sec)

试图后的效果

  1. mysql> select * from emp;
  2. +----+------+------+-----------+---------+
  3. | id | name | sex | dept_code | is_post |
  4. +----+------+------+-----------+---------+
  5. | 1 | a1 | 1 | 1001 | 1 |
  6. | 2 | a2 | 0 | 1002 | 1 |
  7. | 3 | a3 | 1 | 1003 | 1 |
  8. | 4 | a4 | 1 | 1001 | 0 |
  9. | 5 | a5 | 1 | 1002 | 0 |
  10. | 6 | a6 | 0 | 1003 | 1 |
  11. | 7 | a7 | 1 | 1001 | 0 |
  12. +----+------+------+-----------+---------+
  13. 7 rows in set (0.00 sec)
  14. mysql> select * from t_emp;
  15. +----+------+----------+-----------+--------------+
  16. | id | name | sex_name | dept_name | is_post_name |
  17. +----+------+----------+-----------+--------------+
  18. | 1 | a1 | | 研发部 | 在职 |
  19. | 2 | a2 | | 人事部 | 在职 |
  20. | 3 | a3 | | 财务部 | 在职 |
  21. | 4 | a4 | | 研发部 | 离职 |
  22. | 5 | a5 | | 人事部 | 离职 |
  23. | 6 | a6 | | 财务部 | 在职 |
  24. | 7 | a7 | | 研发部 | 离职 |
  25. +----+------+----------+-----------+--------------+
  26. 7 rows in set (0.00 sec)