创建表
CREATE TABLE table_name (column_name column_type);
primary key (PK) #标识该字段为该表的主键,可以唯一的标识记录,主键就是不为空且唯一当然其还有加速查询的作用
foreign key (FK) #标识该字段为该表的外键,用来建立表与表的关联关系
not null #标识该字段不能为空
unique key (UK) #标识该字段的值是唯一的
auto_increment #标识该字段的值自动增长(整数类型,而且为主键)
default #为该字段设置默认值
unsigned #将整型设置为无符号即正数
zerofill #不够使用0进行填充
- 通过命令行
show tables
,desc table_name
查看表结构
添加数据
INSERT INTO table_name
VALUES ( value1,
value2,
...
valueN );
INSERT INTO table_name ( field1,
field2,
...
fieldN )
VALUES ( value1,
value2,
...
valueN );
- 在表名后的括号里明确给出了列名, 即使表的结构改变,这条INSERT 语句仍然能正确工作
alter table table_name add column column_name varchar(30); --添加列
删除表
DELETE FROM table_name
WHERE Clause;
DROP TABLE table_name;
TRUNCATE TABLE table_name;
- DELETE FROM 要求指定从中删除数据的表名,WHERE 子句过滤要删除的行。如果省略 WHERE 子句,它将删除表中每个顾客
- DELETE 删除整行而不是删除列,要删除指定的列,使用 UPDATE 语句
- DELETE, DROP, TRUNCATE区别
alter table table_name drop column column_name; --删除列
修改表
UPDATE table_name
SET field1=new-value1, field2=new-value2
WHERE Clause;
UPDATE
语句以WHERE
子句结束,它告诉 DBMS 更新哪一行。没有 WHERE
子句,DBMS 将会用这个电子邮件地址更新表中的所有行
alter table test rename test1; --修改表名
alter table test modify address char(10) --修改表列类型
||alter table test change address address char(40)
alter table test change column address address1 varchar(30)--修改表列名
练习一:超过5名学生的课
练习二:交换工资
练习三:有趣的电影
MySQL别名
- 别名(alias)是一个字段或值的替换名。别名用 AS 关键字赋予。
AS vend_title
表别名
SELECT RTRIM(vend_name) + ' (' + RTRIM(vend_country) + ')'
AS vend_title
FROM Vendors
ORDER BY vend_name;
INNER JOIN
- INNER JOIN(内连接,或等值连接):获取两个表中字段匹配关系的记录
- 联结条件用特定的 ON 子句而不是 WHERE 子句给出。传递给 ON 的实际条件与传递给 WHERE 的相同。
SELECT vend_name, prod_name, prod_price
FROM Vendors INNER JOIN Products
ON Vendors.vend_id = Products.vend_id;
- 两种基本的外联结形式:左外联结和右外联结。
- 它们之间的唯一差别是所关联的表的顺序。换句话说,调整 FROM 或 WHERE
子句中表的顺序,左外联结可以转换为右外联结
LEFT JOIN
SELECT Customers.cust_id, Orders.order_num
FROM Customers LEFT OUTER JOIN Orders
ON Customers.cust_id = Orders.cust_id;
RIGHT JOIN
SELECT Customers.cust_id, Orders.order_num
FROM Customers RIGHT OUTER JOIN Orders
ON Orders.cust_id = Customers.cust_id;
全外联结(full outer join)
- 它检索两个表中的所有行并关联那些可以关联的行。
- MySQL不支持。
SELECT Customers.cust_id, Orders.order_num
FROM Orders FULL OUTER JOIN Customers
ON Orders.cust_id = Customers.cust_id;
CROSS JOIN
自连接
- 自连接,将表自身连接
UNION
- UNION 指示 DBMS执行这两条 SELECT 语句,并把输出组合成一个查询结果集。
- UNION 必须由两条或两条以上的 SELECT 语句组成,语句之间用关键
字 UNION 分隔(因此,如果组合四条 SELECT 语句,将要使用三个 UNION
关键字)。 - UNION 中的每个查询必须包含相同的列、表达式或聚集函数(不过,
各个列不需要以相同的次序列出)。 - 列数据类型必须兼容:类型不必完全相同,但必须是 DBMS可以隐含
转换的类型(例如,不同的数值类型或不同的日期类型)。
SELECT expression1, expression2, ... expression_n
FROM tables
[WHERE conditions]
UNION [ALL | DISTINCT]
SELECT expression1, expression2, ... expression_n
FROM tables
[WHERE conditions];
练习四:组合两张表
练习五:删除重复的邮箱
练习六:从不订购的客户
练习七:从不订购的客户
练习八:超过经理收入的员工