|
<
文章目次
一,中键束缚
–1,测试
- CREATE TABLE tb_user(
- id INT PRIMARY KEY AUTO_INCREMENT,
- NAME VARCHAR(20)
- )
- #中键束缚的结果:
- #1,子表的id必需与自立表的id
- #2,念删除主表的数据必需先删失落子表相干的
- CREATE TABLE tb_user_addr(
- user_id INT PRIMARY KEY,
- addr VARCHAR(20),
- #中键:经由过程特别字段(中键),形貌了两张表间的干系
- #foreign key(当前表的主键) REFERENCES 对圆表(对圆表的主键)
- FOREIGN KEY(user_id) REFERENCES tb_user(id)
- )
复造代码 两,索引
–1,概述
益处是最年夜的感化便是进步查询服从,害处是索引自己也是一张表没有合适大批的增加
完成历程:1,设置索引 2,利用索引
分类:单值索引 , 独一索引 , 复开索引
–2,测试
- #0.检察索引
- SHOW INDEX FROM dept
- #1.创立单值索引(给经常使用去做为查询前提的字段减)
- #语法:CREATE INDEX 索引名 on 表名(字段名)
- CREATE INDEX dname_index ON dept(dname)
- #2.利用索引(背后的手腕)
- EXPLAIN#察看sql的机能/施行方案(找possible_keys的值)
- SELECT * FROM dept WHERE dname='java'
- #3.创立独一索引(索引列的值不克不及反复)
- CREATE UNIQUE INDEX uni_index ON dept(dname)
- #4. 创立复开索引 并 利用复开索引
- # CREATE INDEX 索引名 ON 表名 (字段1,字段2)
- CREATE INDEX fuhe ON emp(ename,job)
- SHOW INDEX FROM emp
- #5. 利用复开索引(最左特征,不然复开索引生效)
- EXPLAIN SELECT * FROM emp WHERE ename='jack' #按ename查,见效
- #按ename战job查,见效
- EXPLAIN SELECT * FROM emp WHERE ename='jack' AND job='副总'
- #按job战ename查,见效
- EXPLAIN SELECT * FROM emp WHERE job='副总' AND ename='jack'
- #按job查,生效
- EXPLAIN SELECT * FROM emp WHERE job='副总'
- SHOW INDEX FROM emp
- #删除索引
- # 修正表 表名 删除索引 索引名
- ALTER TABLE emp DROP INDEX fuhe
复造代码 三,多表联查
–1,概述
用去完成结合多张表的查询(3张以下),
–2,测试
- #多表联查:发生了大批的冗余数据
- #1.笛卡我积:把多张表用逗号离隔
- SELECT * FROM dept,emp
- #形貌两张表的干系:表名.字段名
- WHERE dept.deptno=emp.deptno
- #2.毗连查询,join..on
- SELECT * FROM dept JOIN emp
- #形貌两张表的干系:表名.字段名
- ON dept.deptno=emp.deptno
- #3.子查询:把前次的查询成果,用去做为下次查询的前提
-
- #操练语法:teachers / courses
- SELECT * FROM teachers , courses WHERE teachers.tno=courses.tno
- SELECT * FROM teachers JOIN courses ON teachers.tno=courses.tno
- #操练1:查询部分称号叫accounting的员工姓名
- #子查询:
- #1,查部分表,按照部分称号accounting查deptno
- SELECT deptno FROM dept WHERE dname='accounting'
- #2,查询员工表,按照deptno查姓名
- SELECT ename FROM emp WHERE deptno=1
- SELECT ename FROM emp WHERE deptno=(
- SELECT deptno FROM dept WHERE dname='accounting')
-
- #笛卡我积:逗号离隔表名,where里写查询前提,能够多个
- SELECT emp.ename FROM dept,emp
- WHERE dept.deptno=emp.deptno #表干系
- AND dept.dname='accounting' #营业前提
- #毗连查询:JOIN毗连表名,ON写表干系,where里写查询前提,能够多个
- SELECT emp.ename FROM dept JOIN emp
- ON dept.deptno=emp.deptno #表干系
- WHERE dept.dname='accounting' #营业前提
- #操练2:列出research部分下的一切员工的疑息
- #子查询:
- #按照部分称号查部分编号
- SELECT deptno FROM dept WHERE dname='research'
- #按照部分编号查员工疑息
- SELECT * FROM emp WHERE deptno=2
- SELECT * FROM emp WHERE deptno=(SELECT deptno FROM dept WHERE dname='research')
- #笛卡我积:
- SELECT emp.* FROM dept,emp
- WHERE dept.deptno=emp.deptno #表干系
- AND dept.dname='research' #营业前提
- #三种毗连查询:
- #内乱毗连inner join:与两个表的交散
- #左中毗连left join:左表的一切战左表满意前提的,没有满意是null
- #左中毗连right join:左表的一切战左表满意前提的,没有满意是null
- SELECT * FROM dept LEFT JOIN emp
- ON dept.deptno=emp.deptno #表干系
- WHERE dept.dname='research' #营业前提
- #操练3:查询事情地点正在两区的一切员工疑息
- #子查询:能够用in大概=毗连子查询
- #按照部分地点查部分编号
- SELECT deptno FROM dept WHERE loc="两区" #会查到多个值
- #按照编号查员工疑息
- SELECT * FROM emp WHERE deptno=2 OR deptno=3
- SELECT * FROM emp WHERE deptno IN(2,3) #in子查询
- SELECT * FROM emp WHERE deptno IN(SELECT deptno FROM dept WHERE loc="两区")
- #笛卡我积
- SELECT emp.* FROM dept,emp
- WHERE dept.deptno=emp.deptno #暗示了两张表的干系
- AND dept.loc="两区" #营业前提
- #毗连查询--相对下效,小表驱动年夜表(左表写一个小表)
- SELECT emp.* FROM dept INNER JOIN emp #内乱毗连与交散
- ON dept.deptno=emp.deptno #暗示了两张表的干系
- WHERE dept.loc="两区" #营业前提
复造代码 免责声明:假如进犯了您的权益,请联络站少,我们会实时删除侵权内乱容,感谢协作! |
1、本网站属于个人的非赢利性网站,转载的文章遵循原作者的版权声明,如果原文没有版权声明,按照目前互联网开放的原则,我们将在不通知作者的情况下,转载文章;如果原文明确注明“禁止转载”,我们一定不会转载。如果我们转载的文章不符合作者的版权声明或者作者不想让我们转载您的文章的话,请您发送邮箱:Cdnjson@163.com提供相关证明,我们将积极配合您!
2、本网站转载文章仅为传播更多信息之目的,凡在本网站出现的信息,均仅供参考。本网站将尽力确保所提供信息的准确性及可靠性,但不保证信息的正确性和完整性,且不对因信息的不正确或遗漏导致的任何损失或损害承担责任。
3、任何透过本网站网页而链接及得到的资讯、产品及服务,本网站概不负责,亦不负任何法律责任。
4、本网站所刊发、转载的文章,其版权均归原作者所有,如其他媒体、网站或个人从本网下载使用,请在转载有关文章时务必尊重该文章的著作权,保留本网注明的“稿件来源”,并自负版权等法律责任。
|