八、连接和多张表的操作
一、抓取数据创建表的3种方式
1、先create table、再select,最后insert
CREATE TABLE table_name1
(
id INT(10) NOT NULL AUTO_INCREMENT PRIMARY KEY,
column_name1 VARCHAR(30)
);
INSERT INTO table_name1 (column_name1)
SELECT column_name2 FROM table_name2
GROUP BY column_name2
ORDER BY column_name2;
2、利用select进行create table,然后以alter添加主键
CREATE TABLE table_name1 AS
SELECT column_name2 FROM table_name2
GROUP BY column_name2
ORDER BY column_name2;
ALTER table_name1
ADD COLUMN id INT(10) NOT NULL AUTO_INCREMENT PRIMARY KEY FIRST,
ADD PRIMARY KEY(id);
3、create table的同时设置主键并利用select填入数据
CREATE TABLE table_name1
(
id INT(10) NOT NULL AUTO_INCREMENT PRIMARY KEY,
column_name1 VARCHAR(30)
) AS
SELECT column_name2 FROM table_name2
GROUP BY column_name2
ORDER BY column_name2;
关键词 AS
① AS把select的结果值存入table_name1的column_name1中;
② 如果没有创建column_name1,那么AS会自动创建一列,并采用与select查询结果相同的列名和数据类型。
4、别名
① 查询里首次提到原始列名的地方后面接AS并设定别名,例如:
CREATE TABLE table_name1
(
id INT(10) NOT NULL AUTO_INCREMENT PRIMARY KEY,
column_name1 VARCHAR(30)
)AS
SELECT column_name2 AS cn2 FROM table_name2
GROUP BY cn2
ORDER BY cn2;
② 别名会改变查询结果(即查询结果的表)里列名的名称,但是不会改变原始表或列的名称;
③ 创建别名时,AS可以省略。
二、表的连接
1、交叉连接 CROSS JOIN,又名 笛卡尔积、交叉积
① 第一张表的每个值都与第二张表的每个值配对,较少适用
② 可用逗号代替CROSS JOIN,例如:
SELECT table_name1.column_name1,table_name2.column_name2 FROM
table_name1 , table_name2
2、内连接 INNER JOIN
SELECT column_name FROM
table_name1 INNER JOIN table_name2 ON someconditions;
① INNER JOIN 利用条件里的比较运算符结合两张表;
② 比较运算符ON,也可以使用关键字WHERE;
③ 分为相等连接(EQUIJOIN)和不等连接(NON-EQUIJOIN);
④ 自然连接(NATURAL JOIN),在两张表的中各自有一列的列名相同时使用,一般情况下,同一数据库的ID列相同,实质和普通内连接一样;
⑤ 在连接中,各类关键字和函数均可使用。