《小常识-25》sq随笔2

本文通过创建多个表并进行数据插入,演示了不同类型的SQL表连接操作,包括内连接、非等值连接、交叉连接及自连接,并展示了全连接的效果实现方式。此外,还介绍了如何使用子查询增强SQL查询的灵活性。

# 创建表连接测试表
CREATE TABLE T_Customer (
    FId INT NOT NULL,
    FName VARCHAR (20) NOT NULL,
    FAge INT,
    PRIMARY KEY (FId)
)
CREATE TABLE T_OrderType (
    FId INT NOT NULL,
    FName VARCHAR (20) NOT NULL,
    PRIMARY KEY (FId)
)
CREATE TABLE T_Order (
    FId INT NOT NULL,
    FNumber VARCHAR (20) NOT NULL,
    FPrice DECIMAL (10, 2),
    FCustomerId INT,
    FTypeId INT,
    PRIMARY KEY (FId)
)
#插入测试数据
INSERT INTO T_Customer(FId,FName,FAge)
VALUES(1,'TOM',21);
INSERT INTO T_Customer(FId,FName,FAge)
VALUES(2,'MIKE',24);
INSERT INTO T_Customer(FId,FName,FAge)
VALUES(3,'JACK',30);
INSERT INTO T_Customer(FId,FName,FAge)
VALUES(4,'TOM',25);
INSERT INTO T_Customer(FId,FName,FAge)
VALUES(5,'LINDA',NULL);
INSERT INTO T_OrderType(FId,FName)
VALUES(1,'MarketOrder');
INSERT INTO T_OrderType(FId,FName)
VALUES(2,'LimitOrder');
INSERT INTO T_OrderType(FId,FName)
VALUES(3,'Stop Order');
INSERT INTO T_OrderType(FId,FName)
VALUES(4,'StopLimit Order');
INSERT INTO T_Order(FId,FNumber,FPrice,FCustomerId, FTypeId)
VALUES(1,'K001',100,1,1);
INSERT INTO T_Order(FId,FNumber,FPrice,FCustomerId, FTypeId)
VALUES(2,'K002',200,1,1);
INSERT INTO T_Order(FId,FNumber,FPrice,FCustomerId, FTypeId)
VALUES(3,'T003',300,1,2);
INSERT INTO T_Order(FId,FNumber,FPrice,FCustomerId, FTypeId)
VALUES(4,'N002',100,2,2);
INSERT INTO T_Order(FId,FNumber,FPrice,FCustomerId, FTypeId)
VALUES(5,'N003',500,3,4);
INSERT INTO T_Order(FId,FNumber,FPrice,FCustomerId, FTypeId)
VALUES(6,'T001',300,4,3);
INSERT INTO T_Order(FId,FNumber,FPrice,FCustomerId, FTypeId)
VALUES(7,'T002',100,NULL,1);

#测试查询
SELECT * FROM T_Customer
SELECT * FROM T_OrderType
SELECT * FROM T_Order

#普通查询
SELECT
    FId
FROM
    T_Customer
WHERE
    FName = 'MIKE'

#内链接查询
SELECT
    FNumber,
    FPrice
FROM
    T_Order
INNER JOIN T_Customer ON FCustomerId = T_Customer.FId
WHERE
    T_Customer.FName = 'TOM'

#非等值链接
SELECT
    T_Order.FNumber,
    T_Order.FPrice,
    T_Customer.FName,
    T_Customer.FAge
FROM
    T_Order
INNER JOIN T_Customer ON T_Order.FPrice < T_Customer.FAge * 5

SELECT
    T_Order.FNumber,
    T_Order.FPrice,
    T_Customer.FName,
    T_Customer.FAge
FROM
    T_Order
INNER JOIN T_Customer ON T_Order.FPrice < T_Customer.FAge * 5
AND T_Order.FCustomerId = T_Customer.FId

#交叉连接
SELECT
    c.FId,
    c.FName,
    c.FAge,
    o.FId,
    o.FNumber,
    o.FPrice
FROM
    T_Customer c,
    T_Order o



SELECT
    T_Customer.FId,
    T_Customer.FName,
    T_Customer.FAge,
    T_Order.FId,
    T_Order.FNumber,
    T_Order.FPrice
FROM
    T_Customer
CROSS JOIN T_Order

#自连接
SELECT
    FNumber,
    FPrice,
    FTypeId
FROM
    T_Order
WHERE
    FTypeId = FTypeId


#全连接的效果
SELECT
    o.FNumber,
    o.FPrice,
    o.FCustomerId,
    c.FName,
    c.FAge
FROM
    T_Order o
LEFT OUTER JOIN T_Customer c ON o.FCustomerId = c.FId
UNION
    SELECT
        o.FNumber,
        o.FPrice,
        o.FCustomerId,
        c.FName,
        c.FAge
    FROM
        T_Order o
    RIGHT OUTER JOIN T_Customer c ON o.FCustomerId = c.FId

#删除测试表
DROP TABLE T_Order;
DROP TABLE T_OrderType;
DROP TABLE T_Customer;

#子查询
#创建表
CREATE TABLE T_Reader (
    FId INT NOT NULL,
    FName VARCHAR (50),
    FYearOfBirth INT,
    FCity VARCHAR (50),
    FProvince VARCHAR (50),
    FYearOfJoin INT
)

CREATE TABLE T_Book (
    FId INT NOT NULL,
    FName VARCHAR (50),
    FYearPublished INT,
    FCategoryId INT
)

CREATE TABLE T_ReaderFavorite (
    FCategoryId INT,
    FReaderId INT
)

CREATE TABLE T_Category (
    FId INT NOT NULL,
    FName VARCHAR (50)
)
#插入测试数据
INSERT INTO T_Category(FId,FName)
VALUES(1,'Story');
INSERT INTO T_Category(FId,FName)
VALUES(2,'History');
INSERT INTO T_Category(FId,FName)
VALUES(3,'Theory');
INSERT INTO T_Category(FId,FName)
VALUES(4,'Technology');
INSERT INTO T_Category(FId,FName)
VALUES(5,'Art');
INSERT INTO T_Category(FId,FName)
VALUES(6,'Philosophy');
INSERT INTO T_Reader(FId,FName,FYearOfBirth,FCity,FProvince,FYearOfJoin)
VALUES(1,'Tom',1979,'TangShan','Hebei',2003);
INSERT INTO T_Reader(FId,FName,FYearOfBirth,FCity,FProvince,FYearOfJoin)
VALUES(2,'Sam',1981,'LangFang','Hebei',2001);
INSERT INTO T_Reader(FId,FName,FYearOfBirth,FCity,FProvince,FYearOfJoin)
VALUES(3,'Jerry',1966,'DongGuan','GuangDong',1995);
INSERT INTO T_Reader(FId,FName,FYearOfBirth,FCity,FProvince,FYearOfJoin)
VALUES(4,'Lily',1972,'JiaXing','ZheJiang',2005);
INSERT INTO T_Reader(FId,FName,FYearOfBirth,FCity,FProvince,FYearOfJoin)
VALUES(5,'Marry',1985,'BeiJing','BeiJing',1999);
INSERT INTO T_Reader(FId,FName,FYearOfBirth,FCity,FProvince,FYearOfJoin)
VALUES(6,'Kelly',1977,'ZhuZhou','HuNan',1995);
INSERT INTO T_Reader(FId,FName,FYearOfBirth,FCity,FProvince,FYearOfJoin)
VALUES(7,'Tim',1982,'YongZhou','HuNan',2001);
INSERT INTO T_Reader(FId,FName,FYearOfBirth,FCity,FProvince,FYearOfJoin)
VALUES(8,'King',1979,'JiNan','ShanDong',1997);
INSERT INTO T_Reader(FId,FName,FYearOfBirth,FCity,FProvince,FYearOfJoin)
VALUES(9,'John',1979,'QingDao','ShanDong',2003);
INSERT INTO T_Reader(FId,FName,FYearOfBirth,FCity,FProvince,FYearOfJoin)
VALUES(10,'Lucy',1978,'LuoYang','HeNan',1996);
INSERT INTO T_Reader(FId,FName,FYearOfBirth,FCity,FProvince,FYearOfJoin)
VALUES(11,'July',1983,'ZhuMaDian','HeNan',1999);
INSERT INTO T_Reader(FId,FName,FYearOfBirth,FCity,FProvince,FYearOfJoin)
VALUES(12,'Fige',1981,'JinCheng','ShanXi',2003);
INSERT INTO T_Book(FId,FName,FYearPublished,FCategoryId)
VALUES(1,'About J2EE',2005,4);
INSERT INTO T_Book(FId,FName,FYearPublished,FCategoryId)
VALUES(2,'Learning Hibernate',2003,4);
INSERT INTO T_Book(FId,FName,FYearPublished,FCategoryId)
VALUES(3,'Two Cites',1999,1);
INSERT INTO T_Book(FId,FName,FYearPublished,FCategoryId)
VALUES(4,'Jane Eyre',2001,1);
INSERT INTO T_Book(FId,FName,FYearPublished,FCategoryId)
VALUES(5,'Oliver Twist',2002,1);
INSERT INTO T_Book(FId,FName,FYearPublished,FCategoryId)
VALUES(6,'History of China',1982,2);
INSERT INTO T_Book(FId,FName,FYearPublished,FCategoryId)
VALUES(7,'History of England',1860,2);
INSERT INTO T_Book(FId,FName,FYearPublished,FCategoryId)
VALUES(8,'History of America',1700,2);
INSERT INTO T_Book(FId,FName,FYearPublished,FCategoryId)
VALUES(9,'History of The World',2008,2);
INSERT INTO T_Book(FId,FName,FYearPublished,FCategoryId)
VALUES(10,'Atom',1930,3);
INSERT INTO T_Book(FId,FName,FYearPublished,FCategoryId)
VALUES(11,'RELATIVITY',1945,3);
INSERT INTO T_Book(FId,FName,FYearPublished,FCategoryId)
VALUES(12,'Computer',1970,3);
INSERT INTO T_Book(FId,FName,FYearPublished,FCategoryId)
VALUES(13,'Astronomy',1971,3);
INSERT INTO T_Book(FId,FName,FYearPublished,FCategoryId)
VALUES(14,'How To Singing',1771,5);
INSERT INTO T_Book(FId,FName,FYearPublished,FCategoryId)
VALUES(15,'DaoDeJing',2001,6);
INSERT INTO T_Book(FId,FName,FYearPublished,FCategoryId)
VALUES(16,'Obedience to Authority',1995,6);
INSERT INTO T_ReaderFavorite(FCategoryId,FReaderId)
VALUES(1,1);
INSERT INTO T_ReaderFavorite(FCategoryId,FReaderId)
VALUES(5,2);
INSERT INTO T_ReaderFavorite(FCategoryId,FReaderId)
VALUES(2,3);
INSERT INTO T_ReaderFavorite(FCategoryId,FReaderId)
VALUES(3,4);
INSERT INTO T_ReaderFavorite(FCategoryId,FReaderId)
VALUES(5,5);
INSERT INTO T_ReaderFavorite(FCategoryId,FReaderId)
VALUES(1,6);
INSERT INTO T_ReaderFavorite(FCategoryId,FReaderId)
VALUES(1,7);
INSERT INTO T_ReaderFavorite(FCategoryId,FReaderId)
VALUES(4,8);
INSERT INTO T_ReaderFavorite(FCategoryId,FReaderId)
VALUES(6,9);
INSERT INTO T_ReaderFavorite(FCategoryId,FReaderId)
VALUES(5,10);
INSERT INTO T_ReaderFavorite(FCategoryId,FReaderId)
VALUES(2,11);
INSERT INTO T_ReaderFavorite(FCategoryId,FReaderId)
VALUES(2,12);
INSERT INTO T_ReaderFavorite(FCategoryId,FReaderId)
VALUES(1,12);
INSERT INTO T_ReaderFavorite(FCategoryId,FReaderId)
VALUES(3,1);
INSERT INTO T_ReaderFavorite(FCategoryId,FReaderId)
VALUES(1,3);
INSERT INTO T_ReaderFavorite(FCategoryId,FReaderId)
VALUES(4,4);

#测试子查询
SELECT  1  AS  f1,2,(SELECT  MIN(FYearPublished)  FROM  T_Book),(SELECT
MAX(FYearPublished) FROM T_Book) AS f4

#测试列值子查询
SELECT T_Reader.FName,t2.FYearPublished,t2.FName
FROM T_Reader,
(SELECT * FROM T_Book WHERE FYearPublished < 1800) t2

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值