01_表关系_一对一
CREATE DATABASE db3;
USE db3;
CREATE TABLE person(
id INT PRIMARY KEY AUTO_INCREMENT ,
NAME VARCHAR ( 20 )
) ;
INSERT INTO person VALUES ( NULL , '张三' ) , ( NULL , '李四' ) ;
CREATE TABLE card(
id INT PRIMARY KEY AUTO_INCREMENT ,
number VARCHAR ( 20 ) UNIQUE NOT NULL ,
pid INT UNIQUE ,
CONSTRAINT cp_fk1 FOREIGN KEY ( pid) REFERENCES person( id)
) ;
INSERT INTO card VALUES ( NULL , '12345' , 1 ) , ( NULL , '56789' , 2 ) ;
02_表关系_一对多
CREATE TABLE USER (
id INT PRIMARY KEY AUTO_INCREMENT ,
NAME VARCHAR ( 20 )
) ;
INSERT INTO USER VALUES ( NULL , '张三' ) , ( NULL , '李四' ) ;
CREATE TABLE orderlist(
id INT PRIMARY KEY AUTO_INCREMENT ,
number VARCHAR ( 20 ) ,
uid INT ,
CONSTRAINT ou_fk1 FOREIGN KEY ( uid) REFERENCES USER ( id)
) ;
INSERT INTO orderlist VALUES ( NULL , 'hm001' , 1 ) , ( NULL , 'hm002' , 1 ) , ( NULL , 'hm003' , 2 ) , ( NULL , 'hm004' , 2 ) ;
CREATE TABLE category(
id INT PRIMARY KEY AUTO_INCREMENT ,
NAME VARCHAR ( 10 )
) ;
INSERT INTO category VALUES ( NULL , '手机数码' ) , ( NULL , '电脑办公' ) ;
CREATE TABLE product(
id INT PRIMARY KEY AUTO_INCREMENT ,
NAME VARCHAR ( 30 ) ,
cid INT ,
CONSTRAINT pc_fk1 FOREIGN KEY ( cid) REFERENCES category( id)
) ;
INSERT INTO product VALUES ( NULL , '华为P30' , 1 ) , ( NULL , '小米note3' , 1 ) ,
( NULL , '联想电脑' , 2 ) , ( NULL , '苹果电脑' , 2 ) ;
03_表关系_多对多
CREATE TABLE student(
id INT PRIMARY KEY AUTO_INCREMENT ,
NAME VARCHAR ( 20 )
) ;
INSERT INTO student VALUES ( NULL , '张三' ) , ( NULL , '李四' ) ;
CREATE TABLE course(
id INT PRIMARY KEY AUTO_INCREMENT ,
NAME VARCHAR ( 10 )
) ;
INSERT INTO course VALUES ( NULL , '语文' ) , ( NULL , '数学' ) ;
CREATE TABLE stu_course(
id INT PRIMARY KEY AUTO_INCREMENT ,
sid INT ,
cid INT ,
CONSTRAINT sc_fk1 FOREIGN KEY ( sid) REFERENCES student( id) ,
CONSTRAINT sc_fk2 FOREIGN KEY ( cid) REFERENCES course( id)
) ;
INSERT INTO stu_course VALUES ( NULL , 1 , 1 ) , ( NULL , 1 , 2 ) , ( NULL , 2 , 1 ) , ( NULL , 2 , 2 ) ;
04_多表查询_数据准备
CREATE DATABASE db4;
USE db4;
CREATE TABLE USER (
id INT PRIMARY KEY AUTO_INCREMENT ,
NAME VARCHAR ( 20 ) ,
age INT
) ;
INSERT INTO USER VALUES ( 1 , '张三' , 23 ) ;
INSERT INTO USER VALUES ( 2 , '李四' , 24 ) ;
INSERT INTO USER VALUES ( 3 , '王五' , 25 ) ;
INSERT INTO USER VALUES ( 4 , '赵六' , 26 ) ;
CREATE TABLE orderlist(
id INT PRIMARY KEY AUTO_INCREMENT ,
number VARCHAR ( 30 ) ,
uid INT ,
CONSTRAINT ou_fk1 FOREIGN KEY ( uid) REFERENCES USER ( id)
) ;
INSERT INTO orderlist VALUES ( 1 , 'hm001' , 1 ) ;
INSERT INTO orderlist VALUES ( 2 , 'hm002' , 1 ) ;
INSERT INTO orderlist VALUES ( 3 , 'hm003' , 2 ) ;
INSERT INTO orderlist VALUES ( 4 , 'hm004' , 2 ) ;
INSERT INTO orderlist VALUES ( 5 , 'hm005' , 3 ) ;
INSERT INTO orderlist VALUES ( 6 , 'hm006' , 3 ) ;
INSERT INTO orderlist VALUES ( 7 , 'hm007' , NULL ) ;
CREATE TABLE category(
id INT PRIMARY KEY AUTO_INCREMENT ,
NAME VARCHAR ( 10 )
) ;
INSERT INTO category VALUES ( 1 , '手机数码' ) ;
INSERT INTO category VALUES ( 2 , '电脑办公' ) ;
INSERT INTO category VALUES ( 3 , '烟酒茶糖' ) ;
INSERT INTO category VALUES ( 4 , '鞋靴箱包' ) ;
CREATE TABLE product(
id INT PRIMARY KEY AUTO_INCREMENT ,
NAME VARCHAR ( 30 ) ,
cid INT ,
CONSTRAINT cp_fk1 FOREIGN KEY ( cid) REFERENCES category( id)
) ;
INSERT INTO product VALUES ( 1 , '华为手机' , 1 ) ;
INSERT INTO product VALUES ( 2 , '小米手机' , 1 ) ;
INSERT INTO product VALUES ( 3 , '联想电脑' , 2 ) ;
INSERT INTO product VALUES ( 4 , '苹果电脑' , 2 ) ;
INSERT INTO product VALUES ( 5 , '中华香烟' , 3 ) ;
INSERT INTO product VALUES ( 6 , '玉溪香烟' , 3 ) ;
INSERT INTO product VALUES ( 7 , '计生用品' , NULL ) ;
CREATE TABLE us_pro(
upid INT PRIMARY KEY AUTO_INCREMENT ,
uid INT ,
pid INT ,
CONSTRAINT up_fk1 FOREIGN KEY ( uid) REFERENCES USER ( id) ,
CONSTRAINT up_fk2 FOREIGN KEY ( pid) REFERENCES product( id)
) ;
INSERT INTO us_pro VALUES ( NULL , 1 , 1 ) ;
INSERT INTO us_pro VALUES ( NULL , 1 , 2 ) ;
INSERT INTO us_pro VALUES ( NULL , 1 , 3 ) ;
INSERT INTO us_pro VALUES ( NULL , 1 , 4 ) ;
INSERT INTO us_pro VALUES ( NULL , 1 , 5 ) ;
INSERT INTO us_pro VALUES ( NULL , 1 , 6 ) ;
INSERT INTO us_pro VALUES ( NULL , 1 , 7 ) ;
INSERT INTO us_pro VALUES ( NULL , 2 , 1 ) ;
INSERT INTO us_pro VALUES ( NULL , 2 , 2 ) ;
INSERT INTO us_pro VALUES ( NULL , 2 , 3 ) ;
INSERT INTO us_pro VALUES ( NULL , 2 , 4 ) ;
INSERT INTO us_pro VALUES ( NULL , 2 , 5 ) ;
INSERT INTO us_pro VALUES ( NULL , 2 , 6 ) ;
INSERT INTO us_pro VALUES ( NULL , 2 , 7 ) ;
INSERT INTO us_pro VALUES ( NULL , 3 , 1 ) ;
INSERT INTO us_pro VALUES ( NULL , 3 , 2 ) ;
INSERT INTO us_pro VALUES ( NULL , 3 , 3 ) ;
INSERT INTO us_pro VALUES ( NULL , 3 , 4 ) ;
INSERT INTO us_pro VALUES ( NULL , 3 , 5 ) ;
INSERT INTO us_pro VALUES ( NULL , 3 , 6 ) ;
INSERT INTO us_pro VALUES ( NULL , 3 , 7 ) ;
INSERT INTO us_pro VALUES ( NULL , 4 , 1 ) ;
INSERT INTO us_pro VALUES ( NULL , 4 , 2 ) ;
INSERT INTO us_pro VALUES ( NULL , 4 , 3 ) ;
INSERT INTO us_pro VALUES ( NULL , 4 , 4 ) ;
INSERT INTO us_pro VALUES ( NULL , 4 , 5 ) ;
INSERT INTO us_pro VALUES ( NULL , 4 , 6 ) ;
INSERT INTO us_pro VALUES ( NULL , 4 , 7 ) ;
05_多表查询_内连接查询
SELECT * FROM USER INNER JOIN orderlist ON orderlist. uid = user . id;
SELECT * FROM USER u INNER JOIN orderlist o ON o. uid= u. id;
SELECT
u. name,
u. age,
o. number
FROM
USER u
INNER JOIN
orderlist o
ON
o. uid= u. id;
SELECT
u. name,
u. age,
o. number
FROM
USER u,
orderlist o
WHERE
o. uid= u. id;
06_多表查询_外连接查询
SELECT
u. * ,
o. number
FROM
USER u
LEFT OUTER JOIN
orderlist o
ON
o. uid= u. id;
SELECT
o. * ,
u. name
FROM
USER u
RIGHT OUTER JOIN
orderlist o
ON
o. uid= u. id;
07_多表查询_子查询
SELECT MAX ( age) FROM USER ;
SELECT NAME, age FROM USER WHERE age= ( SELECT MAX ( age) FROM USER ) ;
SELECT * FROM orderlist WHERE uid IN ( 1 , 2 ) ;
SELECT id FROM USER WHERE NAME IN ( '张三' , '李四' ) ;
SELECT * FROM orderlist WHERE uid IN ( SELECT id FROM USER WHERE NAME IN ( '张三' , '李四' ) ) ;
SELECT * FROM orderlist WHERE id > 4 ;
SELECT
u. name,
o. number
FROM
USER u,
( SELECT * FROM orderlist WHERE id > 4 ) o
WHERE
o. uid= u. id;
08_多表查询_自关联查询
CREATE TABLE employee(
id INT PRIMARY KEY AUTO_INCREMENT ,
NAME VARCHAR ( 20 ) ,
mgr INT ,
salary DOUBLE
) ;
INSERT INTO employee VALUES ( 1001 , '孙悟空' , 1005 , 9000.00 ) ,
( 1002 , '猪八戒' , 1005 , 8000.00 ) ,
( 1003 , '沙和尚' , 1005 , 8500.00 ) ,
( 1004 , '小白龙' , 1005 , 7900.00 ) ,
( 1005 , '唐僧' , NULL , 15000.00 ) ,
( 1006 , '武松' , 1009 , 7600.00 ) ,
( 1007 , '李逵' , 1009 , 7400.00 ) ,
( 1008 , '林冲' , 1009 , 8100.00 ) ,
( 1009 , '宋江' , NULL , 16000.00 ) ;
SELECT
e1. id,
e1. name,
e1. mgr,
e2. id,
e2. name
FROM
employee e1
LEFT OUTER JOIN
employee e2
ON
e1. mgr = e2. id;
09_多表查询_多表查询练习
SELECT
u. id,
u. name,
u. age,
o. number
FROM
USER u,
orderlist o
WHERE
u. id= o. uid;
SELECT
u. id,
u. name,
u. age,
o. number
FROM
USER u
LEFT OUTER JOIN
orderlist o
ON
u. id= o. uid;
SELECT
u. id,
u. name,
u. age,
o. number
FROM
USER u
RIGHT OUTER JOIN
orderlist o
ON
u. id= o. uid;
SELECT
u. id,
u. name,
u. age,
o. number
FROM
USER u,
orderlist o
WHERE
u. id= o. uid
AND
u. age > 23 ;
SELECT
u. id,
u. name,
u. age,
o. number
FROM
USER u,
orderlist o
WHERE
u. id= o. uid
AND
u. name IN ( '张三' , '李四' ) ;
SELECT
c. id,
c. name,
p. name
FROM
category c,
product p
WHERE
c. id= p. cid;
SELECT
c. id,
c. name,
p. name
FROM
category c
LEFT OUTER JOIN
product p
ON
c. id= p. cid;
SELECT
c. id,
c. name,
p. name
FROM
category c
RIGHT OUTER JOIN
product p
ON
c. id= p. cid;
SELECT
u. id,
u. name,
u. age,
p. name
FROM
USER u,
product p,
us_pro up
WHERE
up. uid= u. id
AND
up. pid= p. id;
SELECT
u. id,
u. name,
u. age,
p. name
FROM
USER u,
product p,
us_pro up
WHERE
up. uid= u. id
AND
up. pid= p. id
AND
u. name IN ( '张三' , '李四' ) ;