# 转载:http://www.cnblogs.com/yuanchenqi/articles/6357507.html
# 外键:一种约束条件,与主键对应
# 主表:被绑定的表;字表
# 外键约束:
# -- 每一个班主任会对应多个学生 , 而每个学生只能对应一个班主任
#
# ----主表
#
# CREATE TABLE ClassCharger(
#
# id TINYINT PRIMARY KEY auto_increment,
# name VARCHAR (20),
# age INT ,
# is_marriged boolean -- show create table ClassCharger: tinyint(1)
#
# );
#
# INSERT INTO ClassCharger (name,age,is_marriged) VALUES ("冰冰",12,0),
# ("丹丹",14,0),
# ("歪歪",22,0),
# ("姗姗",20,0),
# ("小雨",21,0);
#
#
# ----子表
#
# CREATE TABLE Student(
#
# id INT PRIMARY KEY auto_increment,
# name VARCHAR (20),
# charger_id TINYINT, --切记:作为外键一定要和关联主键的数据类型保持一致
# -- [ADD CONSTRAINT charger_fk_stu]FOREIGN KEY (charger_id) REFERENCES ClassCharger(id)
#
# ) ENGINE=INNODB;
#
# INSERT INTO Student(name,charger_id) VALUES ("alvin1",2),
# ("alvin2",4),
# ("alvin3",1),
# ("alvin4",3),
# ("alvin5",1),
# ("alvin6",3),
# ("alvin7",2);
#
#
# DELETE FROM ClassCharger WHERE name="冰冰";
# INSERT student (name,charger_id) VALUES ("yuan",1);
# -- 删除居然成功,可是 alvin3显示还是有班主任id=1的冰冰的;
#
# -----------增加外键和删除外键---------
#
# ALTER TABLE student ADD CONSTRAINT abc
# FOREIGN KEY(charger_id)
# REFERENCES classcharger(id);
#
#
# ALTER TABLE student DROP FOREIGN KEY abc;
#————————————————————————————————————————————————————#
# --外键约束对子表的含义: 如果在父表中找不到候选键,则不允许在子表上进行insert/update
#
# --外键约束对父表的含义: 在父表上进行update/delete以更新或删除在子表中有一条或多条对
# -- 应匹配行的候选键时,父表的行为取决于:在定义子表的外键时指定的
# -- on update/on delete子句
# -----------------innodb支持的四种方式---------------------------------------
#
# -----cascade方式 在父表上update/delete记录时,同步update/delete掉子表的匹配记录
# -----外键的级联删除:如果父表中的记录被删除,则子表中对应的记录自动被删除--------
#
# FOREIGN KEY (charger_id) REFERENCES ClassCharger(id)
# ON DELETE CASCADE
#
# ------set null方式 在父表上update/delete记录时,将子表上匹配记录的列设为null
# -- 要注意子表的外键列不能为not null
#
# FOREIGN KEY (charger_id) REFERENCES ClassCharger(id)
# ON DELETE SET NULL
#
#
# ------Restrict方式 :拒绝对父表进行删除更新操作(了解)
#
# ------No action方式 在mysql中同Restrict,如果子表中有匹配的记录,则不允许对父表对应候选键
# -- 进行update/delete操作(了解)
#————————————————————————————————————————————————————#
# 多表查询
# -- 准备两张表
# -- company.employee
# -- company.department
#
# create table employee(
# emp_id int auto_increment primary key not null,
# emp_name varchar(50),
# age int,
# dept_id int
# );
#
# insert into employee(emp_name,age,dept_id) values
# ('A',19,200),
# ('B',26,201),
# ('C',30,201),
# ('D',24,202),
# ('E',20,200),
# ('F',38,204);
#
#
# create table department(
# dept_id int,
# dept_name varchar(100)
# );
#
# insert into department values
# (200,'人事部'),
# (201,'技术部'),
# (202,'销售部'),
# (203,'财政部');
#
# mysql> select * from employee;
# +--------+----------+------+---------+
# | emp_id | emp_name | age | dept_id |
# +--------+----------+------+---------+
# | 1 | A | 19 | 200 |
# | 2 | B | 26 | 201 |
# | 3 | C | 30 | 201 |
# | 4 | D | 24 | 202 |
# | 5 | E | 20 | 200 |
# | 6 | F | 38 | 204 |
# +--------+----------+------+---------+
# rows in set (0.00 sec)
#
# mysql> select * from department;
# +---------+-----------+
# | dept_id | dept_name |
# +---------+-----------+
# | 200 | 人事部 |
# | 201 | 技术部 |
# | 202 | 销售部 |
# | 203 | 财政部 |
# +---------+-----------+
# rows in set (0.01 sec)
#————————————————————————————————————————————————————#
# 1.笛卡尔积查询
# mysql> SELECT * FROM employee,department;
#
# -- select employee.emp_id,employee.emp_name,employee.age,
# -- department.dept_name from employee,department;
#
# +--------+----------+------+---------+---------+-----------+
# | emp_id | emp_name | age | dept_id | dept_id | dept_name |
# +--------+----------+------+---------+---------+-----------+
# | 1 | A | 19 | 200 | 200 | 人事部 |
# | 1 | A | 19 | 200 | 201 | 技术部 |
# | 1 | A | 19 | 200 | 202 | 销售部 |
# | 1 | A | 19 | 200 | 203 | 财政部 |
# | 2 | B | 26 | 201 | 200 | 人事部 |
# | 2 | B | 26 | 201 | 201 | 技术部 |
# | 2 | B | 26 | 201 | 202 | 销售部 |
# | 2 | B | 26 | 201 | 203 | 财政部 |
# | 3 | C | 30 | 201 | 200 | 人事部 |
# | 3 | C | 30 | 201 | 201 | 技术部 |
# | 3 | C | 30 | 201 | 202 | 销售部 |
# | 3 | C | 30 | 201 | 203 | 财政部 |
# | 4 | D | 24 | 202 | 200 | 人事部 |
# | 4 | D | 24 | 202 | 201 | 技术部 |
# | 4 | D | 24 | 202 | 202 | 销售部 |
# | 4 | D | 24 | 202 | 203 | 财政部 |
# | 5 | E | 20 | 200 | 200 | 人事部 |
# | 5 | E | 20 | 200 | 201 | 技术部 |
# | 5 | E | 20 | 200 | 202 | 销售部 |
# | 5 | E | 20 | 200 | 203 | 财政部 |
# | 6 | F | 38 | 204 | 200 | 人事部 |
# | 6 | F | 38 | 204 | 201 | 技术部 |
# | 6 | F | 38 | 204 | 202 | 销售部 |
# | 6 | F | 38 | 204 | 203 | 财政部 |
# +--------+----------+------+---------+---------+-----------+
# 2.内连接
# -- 查询两张表中都有的关联数据,相当于利用条件从笛卡尔积结果中筛选出了正确的结果。
#
# select * from employee,department where employee.dept_id = department.dept_id;
# --select * from employee inner join department on employee.dept_id = department.dept_id;
#
# +--------+----------+------+---------+---------+-----------+
# | emp_id | emp_name | age | dept_id | dept_id | dept_name |
# +--------+----------+------+---------+---------+-----------+
# | 1 | A | 19 | 200 | 200 | 人事部 |
# | 2 | B | 26 | 201 | 201 | 技术部 |
# | 3 | C | 30 | 201 | 201 | 技术部 |
# | 4 | D | 24 | 202 | 202 | 销售部 |
# | 5 | E | 20 | 200 | 200 | 人事部 |
# +--------+----------+------+---------+---------+-----------+
# 3.外连接
# --(1)左外连接:在内连接的基础上增加左边有右边没有的结果
#
# select *
# from employee left
#
# join
# department
# on
# employee.dept_id = department.dept_id;
#
# +--------+----------+------+---------+---------+-----------+
# | emp_id | emp_name | age | dept_id | dept_id | dept_name |
# +--------+----------+------+---------+---------+-----------+
# | 1 | A | 19 | 200 | 200 | 人事部 |
# | 5 | E | 20 | 200 | 200 | 人事部 |
# | 2 | B | 26 | 201 | 201 | 技术部 |
# | 3 | C | 30 | 201 | 201 | 技术部 |
# | 4 | D | 24 | 202 | 202 | 销售部 |
# | 6 | F | 38 | 204 | NULL | NULL |
# +--------+----------+------+---------+---------+-----------+
#
# --(2)右外连接:在内连接的基础上增加右边有左边没有的结果
#
# select *
# from employee RIGHT
#
# JOIN
# department
# on
# employee.dept_id = department.dept_id;
#
# +--------+----------+------+---------+---------+-----------+
# | emp_id | emp_name | age | dept_id | dept_id | dept_name |
# +--------+----------+------+---------+---------+-----------+
# | 1 | A | 19 | 200 | 200 | 人事部 |
# | 2 | B | 26 | 201 | 201 | 技术部 |
# | 3 | C | 30 | 201 | 201 | 技术部 |
# | 4 | D | 24 | 202 | 202 | 销售部 |
# | 5 | E | 20 | 200 | 200 | 人事部 |
# | NULL | NULL | NULL | NULL | 203 | 财政部 |
# +--------+----------+------+---------+---------+-----------+
#
# --(3)全外连接:在内连接的基础上增加左边有右边没有的和右边有左边没有的结果
#
# -- mysql不支持全外连接
# full
# JOIN
# -- mysql可以使用此种方式间接实现全外连接
#
# select *
# from employee RIGHT
#
# JOIN
# department
# on
# employee.dept_id = department.dept_id
# UNION
# select *
# from employee LEFT
#
# JOIN
# department
# on
# employee.dept_id = department.dept_id;
#
# +--------+----------+------+---------+---------+-----------+
# | emp_id | emp_name | age | dept_id | dept_id | dept_name |
# +--------+----------+------+---------+---------+-----------+
# | 1 | A | 19 | 200 | 200 | 人事部 |
# | 2 | B | 26 | 201 | 201 | 技术部 |
# | 3 | C | 30 | 201 | 201 | 技术部 |
# | 4 | D | 24 | 202 | 202 | 销售部 |
# | 5 | E | 20 | 200 | 200 | 人事部 |
# | NULL | NULL | NULL | NULL | 203 | 财政部 |
# | 6 | F | 38 | 204 | NULL | NULL |
# +--------+----------+------+---------+---------+-----------+
#
# -- 注意
# union与union
# all的区别:union会去掉相同的纪录
#————————————————————————————————————————————————————#
# 多表查询之复合条件连接查询
# -- 查询员工年龄大于等于25岁的部门
#
# SELECT DISTINCT department.dept_name
# FROM employee,department
# WHERE employee.dept_id = department.dept_id
# AND age>25;
#
#
# --以内连接的方式查询employee和department表,并且以age字段的升序方式显示
#
# select employee.emp_id,employee.emp_name,employee.age,department.dept_name
# from employee,department
# where employee.dept_id = department.dept_id
# order by age asc;
#————————————————————————————————————————————————————#
# 多表查询之子查询
# -- 子查询是将一个查询语句嵌套在另一个查询语句中。
# -- 内层查询语句的查询结果,可以为外层查询语句提供查询条件。
# -- 子查询中可以包含:IN、NOT IN、ANY、ALL、EXISTS 和 NOT EXISTS等关键字
# -- 还可以包含比较运算符:= 、 !=、> 、<等
#
#
# -- 1. 带IN关键字的子查询
#
# ---查询employee表,但dept_id必须在department表中出现过
#
# select * from employee
# where dept_id IN
# (select dept_id from department);
#
#
# +--------+----------+------+---------+
# | emp_id | emp_name | age | dept_id |
# +--------+----------+------+---------+
# | 1 | A | 19 | 200 |
# | 2 | B | 26 | 201 |
# | 3 | C | 30 | 201 |
# | 4 | D | 24 | 202 |
# | 5 | E | 20 | 200 |
# +--------+----------+------+---------+
# rows in set (0.01 sec)
#
#
#
# -- 2. 带比较运算符的子查询
# -- =、!=、>、>=、<、<=、<>
#
# -- 查询员工年龄大于等于25岁的部门
# select dept_id,dept_name from department
# where dept_id IN
# (select DISTINCT dept_id from employee where age>=25);
#
# -- 3. 带EXISTS关键字的子查询
#
# -- EXISTS关字键字表示存在。在使用EXISTS关键字时,内层查询语句不返回查询的记录。
# -- 而是返回一个真假值。Ture或False
# -- 当返回Ture时,外层查询语句将进行查询;当返回值为False时,外层查询语句不进行查询
#
# select * from employee
# WHERE EXISTS
# (SELECT dept_name from department where dept_id=203);
#
# --department表中存在dept_id=203,Ture
#
#
# select * from employee
# WHERE EXISTS
# (SELECT dept_name from department where dept_id=205);
#
# -- Empty set (0.00 sec)
#
#
# ps: create table t1(select * from t2);

Pyhton学习——Day47的更多相关文章

  1. Pyhton学习——Day26

    #多态:多态指的是一类事物有多种形态# import abc# class Animal(metaclass = abc.ABCMeta):# 同一类事物:动物# @abc.abstractclass ...

  2. pyhton 学习

    官方学习文档 https://docs.python.org/3/tutorial/

  3. 20190320_head first pyhton学习笔记之构建发布

    1.把代码nester.py放入文件夹nester中,在文件夹中再新建一个setup.py文件,文件内容如下: from distutils.core import setup setup( name ...

  4. Pyhton学习——Day2

    Python开发IDE(工具)Pycharm.eclipse1.循环while 条件 #循环体 #条件为真则执行 #条件为假则执行break用于退出所有循环continue用于退出当前循环 2.Pyc ...

  5. Pyhton学习——Day28

    #上下文协议:文件操作时使用with执行# with open('a.txt','w',encoding='utf-8') as f1:# with语句,为了让一个对象兼容with语句,必须在这个对象 ...

  6. Pyhton学习——Day27

    # hasattr(obj,'name')-->obj.name# getattr(obj,'name',default = 'xxx')--->obj.name# setattr(obj ...

  7. Pyhton学习——Day25

    #面向对象的几个方法#1.静态方法@staticmethod,不能访问类属性,也不能访问实例属性,只是类的工具包#2.类方法:@classmethod,在函数属性前加上类方法,显示为(cls)代表类, ...

  8. Pyhton学习——Day24

    # #面向对象设计:# def dog(name,gender,type):# def jiao(dog):# print('One Dog[%s],wfwfwf'%dog['name'])# def ...

  9. Pyhton学习——Day23

    #re模块方法:findall search#findall:返回所有满足匹配条件的数值,放在列表里#search : #函数会在字符串内查找模式匹配,只到找到第一个匹配然后返回一个包含匹配信息的对象 ...

随机推荐

  1. Python数据分析5-----数据规约

    1.数据规约概念和目的 数据规约是产生更小且保留数据完整性的新数据集. 意义:降低无效错误数据的影响.更有效率.降低存储成本. 2.属性规约 (1)属性合并(降维):比如PCA (2)删除不相关属性 ...

  2. 《Exception》第八次团队作业:Alpha冲刺

    一.项目基本介绍 项目 内容 这个作业属于哪个课程 任课教师博客主页链接 这个作业的要求在哪里 作业链接地址 团队名称 Exception 作业学习目标 1.掌握软件测试基础技术.2.学习迭代式增量软 ...

  3. 【JavaScript框架封装】数据类型检测模块功能封装

    数据类型检测封装后的最终模块代码如下: /*数据类型检验*/ xframe.extend(xframe, { // 鸭子类型(duck typing)如果它走起路来像鸭子,叫起来也是鸭子,那么它就是鸭 ...

  4. nyoj125-盗梦空间

    盗梦空间 时间限制:3000 ms  |  内存限制:65535 KB 难度:2 描述 <盗梦空间>是一部精彩的影片,在这部电影里,Cobb等人可以进入梦境之中,梦境里的时间会比现实中的时 ...

  5. BZOJ 2716/2648 SJY摆棋子 (三维偏序CDQ+树状数组)

    题目大意: 洛谷传送门 这明明是一道KD-Tree,CDQ分治是TLE的做法 化简式子,$|x1-x2|-|y1-y2|=(x1+y1)-(x2+y2)$ 而$CDQ$分治只能解决$x1 \leq x ...

  6. Linux磁盘分区--GPT分区

    MBR分区表有一定的局限性,最大支持2.1tb硬盘,单块硬盘最多4个主分区. 这里就要引入GPT分区表,可以支持最大18EB的卷,最多支持128个主分区,所以如果使用大于2tb的卷,就必须使用GTP分 ...

  7. buntu Rhythmbox解决中文乱码

    Ubuntu Rhythmbox解决中文乱码 在这里介绍的是一个解决方法,修改变量. 在终端输入: gedit ~/.profile 在最后加入下面内容: exportGST_ID3_TAG_ENCO ...

  8. 正则表达式和豆瓣Top250的爬取练习

    datawhale任务2-爬取豆瓣top250 正则表达式 豆瓣250页面分析 完整代码 参考资料 正则表达式 正则表达式的功能用于实现字符串的特定模式精确检索或替换操作. 常用匹配模式 常用修饰符 ...

  9. Zepto.js实现fadeIn,fadeOut功能

    Zepto是一个轻量级的针对现代高级浏览器的JavaScript库, 它与jquery有着类似的api. 如果你会用jquery,那么你也会用zepto. Zepto的设计目的是提供 jQuery 的 ...

  10. MySQL主要命令(2)

    创建表 : create table if not exists employee( //格式:变量名 数据类型, id int, name varchar(30), sex varchar(2), ...