MySQL查询语句

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 语句中的列名。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章