MySQL查询语句
创建水果表:
CREATE TABLE fruits
(
f_id char(10) NOT NULL,
s_id INT NOT NULL,
f_name char(255) NOT NULL,
f_price decimal(8,2) NOT NULL,
PRIMARY KEY(f_id)
);
插入数据:
INSERT INTO fruits (f_id, s_id, f_name, f_price)
VALUES
('1', 108, 'apple', 5.2),
('2', 101, 'blackberry', 10.2),
('3', 102, 'orange', 11.2),
('4', 105, 'melon', 8.2),
('5', 102, 'banana', 10.3),
('6', 102, 'grape', 5.3),
('7', 103, 'coconut', 9.2),
('8', 101, 'cherry', 3.2),
('9', 103, 'apricot', 2.2),
('10', 104, 'lemon', 6.4),
('11', 104, 'berry', 7.6),
('12', 106, 'mango', 15.6);
创建供应商表:
CREATE TABLE suppliers (
s_id INT NOT NULL AUTO_INCREMENT,
s_name CHAR (50) NOT NULL,
s_city CHAR (50) NULL,
s_zip CHAR (10) NULL,
s_call CHAR (50) NOT NULL,
PRIMARY KEY (s_id)
);
插入数据:
INSERT INTO suppliers (
s_id,
s_name,
s_city,
s_zip,
s_call
)
VALUES
(
101,
'FastFruit Inc.',
'Tianjin',
'300000',
'48075'
),
(
102,
'LT Supplies',
'Chongqing',
'400000',
'44333'
),
(
103,
'ACME',
'Shanghai',
'200000',
'90046'
),
(
104,
'FNK Inc.',
'Zhongshan',
'528437',
'11111'
),
(
105,
'Good Set',
'Taiyuang',
'030000',
'22222'
),
(
106,
'Just Eat Ours',
'Beijing',
'010',
'45678'
),
(
107,
'DK Inc.',
'Zhengzhou',
'450000',
'33332'
);
一.MySQL连接查询
(1).内连接查询
SELECT
f.f_name,
f.f_price,
s.s_name,
s.s_city
FROM
fruits f
INNER JOIN suppliers s ON f.s_id = s.s_id;
查询结果:
“on” 作为两张表内连的条件,如果没有这个条件会产生一个笛卡尔集的结果。
(2).左连接查询
左连接的结果包括LEFT JOIN子句中指定的左表的所有行,而不仅仅是连接列所匹配的行。如果左表的某行在右表中没有匹配行,则在相关联的结果行中,右表的所有选择列表列均为空值。
SELECT
f.f_name,
f.f_price,
s.s_name,
s.s_city
FROM
fruits f
left JOIN suppliers s ON f.s_id = s.s_id;
结果:
第一条苹果没有匹配对应的供应商,苹果信息查出来了,供应商信息就为空
(3).右连
右连接是左连接的反向连接,将返回右表的所有行。如果右表的某行在左表中没有匹配行,左表将返回空值。
SELECT
f.f_name,
f.f_price,
s.s_name,
s.s_city
FROM
fruits f
right JOIN suppliers s ON f.s_id = s.s_id;
二.MySQL联合查询
UNION 用于合并两个或多个 SELECT 语句的结果集,并消去表中任何重复行。UNION 内部的 SELECT 语句必须拥有相同数量的列,列也必须拥有相似的数据类型。同时,每条 SELECT 语句中的列的顺序必须相同.
语法:
SELECT column_name FROM table1
UNION
SELECT column_name FROM table2
例:
SELECT
f_name,
f_price
FROM
fruits
UNION
SELECT
s_name,
s_city
FROM
suppliers
默认地,UNION 操作符选取不同的值。如果允许重复的值,请使用 UNION ALL。当 ALL 随 UNION 一起使用时(即 UNION ALL),不消除重复行。
另外,UNION 结果集中的列名总是等于 UNION 中第一个 SELECT 语句中的列名。