将查询或者筛选出来列用关键字AS 命名
SELECT 字段名 [AS] 别名 [,字段名 [AS] 别名,……] FROM 表名;
给表起一个别名,为了在查询数据时,使用起来方便,也使用关键字AS
SELECT * FROM 表名 [AS] 别名;
如果表中有至少一个匹配,则返回行,获取两个表中字段匹配关系的记录。
语法:
SELECT column_name
FROM table_name1
INNER JOIN table_name2
ON table_name1.column_name=table_name2.column_name
等价于:
SELECT column_name
FROM table_name1
WHERE table_name1.column_name=table_name2.column_name
即使右表中没有匹配,也从左表返回所有的行;会返回左表(table1)中所有的行
SELECT column_name
FROM table_name1
LEFT JOIN table_name2
ON table_name1.column_name=table_name2.column_name
注:除此之外还有RIGHT JOIN和FULL JOIN(其中right join 和left join用法相似,即右表中的所有行,而full join 返回两个表中的所有行)
有时,一些特殊的查询需要对同一个关系进行连接查询,成为表的自身连接: 即一张表看成是两张表。
SELECT c1.cust_id, c1.cust_name, c1.cust_contact
FROM Customers AS c1, Customers AS c2
WHERE c1.cust_name = c2.cust_name
AND c2.cust_contact = ‘Jim Jones’;
MySQL UNION 操作符用于连接两个以上的 SELECT 语句的结果组合到一个结果集合中。多个 SELECT 语句会删除重复的数据。
语法:
SELECT expression1, expression2, ... expression_n
FROM tables
[WHERE conditions]
UNION [ALL | DISTINCT]
SELECT expression1, expression2, ... expression_n
FROM tables
[WHERE conditions];
expression1, expression2, … expression_n: 要检索的列。
tables: 要检索的数据表。
WHERE conditions: 可选, 检索条件。
DISTINCT: 可选,删除结果集中重复的数据。默认情况下 UNION 操作符已经删除了重复数据,所以 DISTINCT 修饰符对结果没啥影响。
ALL: 可选,返回所有结果集,包含重复数据。
注:UNION语句用于将不同表中相同列中查询的数据展示出来(不包括重复数据),UNION ALL语句包括重复数据。
INNER JOIN产生的结果是两张表的交集,
LEFT JOIN产生左表的完全集,右表中若没有匹配则以null值取代。
CROSS JOIN将两张表数据进行一个N*M组合,即笛卡尔积。
自连接是对于自身的操作,将自己当成两张表操作来提取需要的信息。
UNION操作符是用于连接两个以上的SELECT语句,它和INNER JOIN的区别是一个是连接两张表,另一个是连接两个SELECT语句。
https://blog.csdn.net/TNTZS666/article/details/88074247
https://www.cnblogs.com/sunchaothu/p/10460582.html
http://www.runoob.com/mysql/mysql-join.html
step1:在数据库中创建表1和表2
step2:插入数据
INSERT INTO Person VALUES(1,'jielun','zhou'),
(2,'yifeng','li'),
(3,'mi','yang');
INSERT INTO Address VALUES(4,1,'taibei','China'),
(5,2,'sichuan','China'),
(6,3,'beijing','China');
step3:编写一个 SQL 查询,满足条件:无论 person 是否有地址信息,都需要基于上述两表提供 person 的以下信息:FirstName, LastName, City, State
SELECT FirstName, LastName, City, State
FROM Person LEFT JOIN Address
ON Person.PersonId = Address.PersonId;
编写一个 SQL 查询,来删除 email 表中所有重复的电子邮箱,重复的邮箱里只保留 Id 最小 的那个。
-- 创建表并插入数据
CREATE TABLE email(
Id INT NOT NULL,
Email VARCHAR(255) NOT NULL,
PRIMARY KEY (Id)
);
-- 插入数据
INSERT INTO email VALUES(1,'[email protected]'),
(2,'[email protected]'),
(3,'[email protected]');
编写查询语句:
DELETE e1
FROM email e1,email e2
WHERE e1.Email = e2.Email AND e1.Id>e2.Id;