1. MySQL别名
1、为表取别名
SELECT * FROM 表名字 [AS] 表别名;
2、为字段取别名
SELECT 列名 AS 列别名 FROM 表名 AS 表别名;
2. 连接查询
1、内连接(where / inner join … on …)
2、外链接
a) 左外连接(left join … on …)
b) 右外连接(right join … on …)
3. 合并查询结果
1、union(合并查询结果去除重复)
2、union all(单纯的合并结果不处理重复数据)
4. 小项目
1. 组合两张表 (难度:简单)
SQL:
# create and use database person_info
CREATE DATABASE IF NOT EXISTS person_info DEFAULT CHARSET utf8 COLLATE utf8_general_ci;
USE PERSON_INFO;
# create table
CREATE TABLE Person(
Person INT PRIMARY KEY,
FirstName VARCHAR(50),
LastName VARCHAR(50)
);
CREATE TABLE Address(
AddressId INT PRIMARY KEY,
PersonId INT,
City VARCHAR(50),
State VARCHAR(50)
);
# INSERT DATA
INSERT INTO Person VALUE(1, "Ricky", "Cai");
INSERT INTO Person VALUE(2, "Gin", "Qin");
INSERT INTO Person VALUE(3, "Vermouth", "Kris");
INSERT INTO Address VALUE(1, 1, "Zhuhai", "China");
INSERT INTO Address VALUE(2, 2, NULL, NULL);
INSERT INTO Address VALUE(3, 3, "Tokyo", "America");
# vefify
SELECT * FROM Person;
SELECT * FROM Address;
# task
SELECT FirstName, LastName, a.City, a.State
FROM Person AS p
RIGHT JOIN Address AS a
ON a.PersonId = p.PersonId;
Result:
2. 删除重复的邮箱(难度:简单)
SQL:
CREATE TABLE Email(
Id INT PRIMARY KEY,
Email varchar(100)
);
INSERT INTO Email VALUE(1, "[email protected]");
INSERT INTO Email VALUE(2, "[email protected]");
INSERT INTO Email VALUE(3, "[email protected]");
# Close the current session safe mode
SET SQL_SAFE_UPDATES = 0;
# Remove the same email
DELETE e1
FROM Email e1, Email e2
WHERE e1.Email = e2.Email
AND e1.Id > e2.Id;
# Recover safe mode
SET SQL_SAFE_UPDATES = 1;
SELECT * FROM Email;
Result: