1.概念:表table代表了生活中一个主体,表关联则代表了表之间的关系 表关联:association 2.表关系 四种 1> 一对一 one to one QQ和QQ邮箱,员工和员工编号 2> 一对多 one to many 最常见,部门和员工,用户和订单 3> 多对一 many to one 一对多反过来,员工和部门,订单和用户 4> 多对多 many to many 老师和学生,老师和课程 比如:1师n生 1生n师 就是多对多 3.创建表 //多条SQL语句一起执行时 每条SQL语句用 ; 表示结束 表设计特点: 表都以s结束,标识复数 字段多以表的首字母作为开头,在多表联查时,方便标识出是哪个表的字段 4.插入数据 5.多表联查的方式 三种 方式1: 笛卡尔积:Cartesian product 结构: select ? from 表1,表2.... 产生的问题: 产生了庞大的结果集,出现了大量重复的数据 解决办法: select ? from 表1,表2...where 过滤条件#描述两个表的关系 比如1表部门名=2表部门名 比如:计算计算机导论课程所得的总分 SELECt SUM(scores.degree) FROM courses,scores WHERe courses.cno=scores.cno AND courses.cname="计算机导论" select 聚合函数(表名.字段名)/字段名 from 表1,表2 where 描述两个表的关系 and 真正的业务条件 方式2: 连接查询 join //使用链接查询 尽量 join左边的表越简单越好 左边的比右边的表要简单 小表驱动大表 练习5 统计陈冰老师能将的课程名称 SELECt courses.cname FROM teachers JOIN courses ON teachers.tno=courses.tno WHERe teachers.tname="陈冰" select 聚合函数(表名.字段名)/字段名 from 表1 join 表2 on 描述两个表的关系 where 真正的业务需求 三种连接 : ----最高效的是内连接 内连接 : inner join 取两表的交集部分-----简写成 join 左(外)连接 : left join 取左表的所有数据和右表符合条件的数据,然后右表不满足条件的数据填充null 右(外)连接 : right join 取右表的所有数据和左表符合条件的数据,然后左表不满足条件的数据填充null 方式3 :子查询 也叫 嵌套查询 subquery 1.概念:子查询是指把第一次的查询结果 作为第二次查询的条件 继续发起查询语句 子查询执行效率低慎用。 2. //1.单行查询 用 = #练习1 查询reserch部门的员工信息 #第一次 查部门表 根据部门名称查部门编号 SELECt deptno FROM dept1 WHERe dname='reserch' #第二次查 差员工表 根据部门编号查询员工信息 SELECt * FROM emp1 WHERe deptno=2 #子查询 SELECt * FROM emp1 WHERe deptno=(SELECt deptno FROM dept1 WHERe dname='reserch') //2 多行查询 用 in #练习3 查询Java开发部和reserch部门的员工姓名 SELECt ename FROM emp1 WHERe deptno IN (SELECt deptno FROM dept1 WHERe dname="java开发部" OR dname="reserch") 或者 SELECt ename FROM emp1 WHERe deptno IN (SELECt deptno FROM dept1 WHERe dname IN ("java开发部","reserch")) //备注: 笛卡尔积和连接查询如果不指定所查内容是哪个表 就会查出来两个表所有的信息 所以有时候需要指定查那个表的内容多表联查 综合案例
#练习1 查询可以讲高等数学的老师的名字 #笛卡尔积 SELECt tname FROM teachers,courses WHERe teachers.tno=courses.tno AND courses.cname="高等数学" #连接查询 SELECt tname FROM teachers JOIN courses ON teachers.tno=courses.tno WHERe courses.cname="高等数学" #子查询 在不同的表里查询 SELECt tname FROM teachers WHERe tno=(SELECt tno FROM courses WHERe cname="高等数学") #综合练习2 #练习2 查询学生曾华的总得分 #笛卡尔积 SELECt SUM(scores.degree) FROM scores ,students WHERe scores.sno=students.sno AND students.sname="曾华" #链接查询 SELECt SUM(scores.degree) FROM scores JOIN students ON scores.sno=students.sno WHERe students.sname="曾华" #子查询 在不同的表里查询 SELECt SUM(scores.degree) FROM scores WHERe sno=(SELECt sno FROM students WHERe sname="曾华") #子查询 #查询高于平均工资的员工信息 在一个表里查询 SELECt * FROM emp1 WHERe sal>(SELECt AVG(sal) FROM emp1 )SQL语句执行顺序
(1) FROM [left_table] 选择表 (2) ONSQL面试题 拓展 1.索引链接条件 (3) JOIN 链接 (4) WHERe 条件过滤 (5) GROUP BY 分组 (6) AGG_FUNC(column or expression),... 聚合 (7) HAVINg 分组过滤 (8) SELECt (9) DISTINCT column,... 选择字段、去重 (9) ORDER BY 排序 (10) LIMIT count OFFSET count; 分页
1.概念:索引是一种排好序的快速查找的数据结构 2.作用: 提高数据库的查询效率 3.分类: 1> 单值索引:一个索引只包括一个列/字段,一个表可以有多个列 2> 复合索引:一个索引同时包括多列/字段 3> 唯一索引:特殊的单值索引, 4.创建单值索引 # 提高查询效率 建议给 经常用来查询的字段加索引 #1.查看索引 主键自带索引,不需要再添加索引 # 固定结构 show index from 表名 SHOW INDEX FROM students #2. 创建索引 //# 固定结构 create index 索引名 on 表名(字段名) CREATE INDEX index1 ON students(sname) SHOW INDEX FROM students #3.使用索引 按照索引列去查(看不到索引的 *** 作) #查看学生信息 SELECt * FROM students WHERe sname="陆君" #4.查询SQL的执行计划/性能(只想关注你的SQL是否用到了索引 使用explain + SQL语句 查看执行结果里的key) 其实就是查看是否使用了索引 EXPLAIN SELECt * FROM students WHERe sname="陆君" 5.创建唯一索引 找到合适的列,字段的值都要唯一 //#语法结构 create unique index 索引名 on 表名(字段名) #create unique index index2 on students(ssex)#不能加唯一索引 值大量重复 CREATE UNIQUE INDEX index2 ON students(sno) SHOW INDEX FROM students #使用索引 SELECt * FROM students WHERe sno=101 EXPLAIN SELECt * FROM students WHERe sno=101 #不要给主键索引添加唯一索引 会让主键索引失效 单值索引可以加但是使用的时候还是主键索引,所以还是不要加 6.创建复合索引 # 创建复合索引 一个索引包含着多个列 # 固定结构 CREATE INDEX 索引名 ON 表名(字段名1,字段名2....) CREATE INDEX index3 ON emp1(ename,job,deptno) SHOW INDEX FROM emp1 #使用索引 最左特性 使用索引 必须包含复合最左边的元素 EXPLAIN SELECt * FROM emp1 WHERe ename="jack" #复合索引生效 EXPLAIN SELECt * FROM emp1 WHERe job="总监" #复合索引失效 没有用到复合索引 EXPLAIN SELECt * FROM emp1 WHERe ename="jack"AND job="总监" #生效 且 两个条件可以互换位置 不影响 只要包含最左元素就好 EXPLAIN SELECt * FROM emp1 WHERe ename="jack"OR job="总监" #失效 多个条件用and连接才会生效 7.删除索引 语法结构: alter table 表名 drop index 索引名 8.优缺点 优点: -大大提高了查询效率 -本质上数据库会为索引列的数据进行排序,快速查询 2缺点: -本身索引是一个单独的表,也需要占空间的 -索引适合查询的业务,但是,也需要同步更新修改一些新的数据,需要一定的时间 9.原则: 1> 什么时候添加索引? 频繁的按照一个规则去查询的数据,就应该考虑添加索引 2> 给谁添加索引? 给那些经常作为查询条件的字段添加索引 3> 加啥索引? 索引是有分类的,单值索引/唯一索引/复合索引 看情况选择不同的索引类型 4> 如何查看SQL的执行计划/性能 或者说 怎么查看使用什么索引? 使用 Explain2.视图 3.SQL优化
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)