day20
关联查询
#左连接:表名 left join 表名 以左表为主表,只显示与左表能匹配的行
SELECT s.*,q.* FROM student AS s LEFT JOIN queue_info AS q ON s.q_id = q.id;
#右链接:以右边的表为主表,只显示与右表能匹配的行
SELECT s.*,q.* FROM student AS s RIGHT JOIN queue_info AS q ON s.q_id = q.id;
#内连接:只显示两边都能匹配上的行
SELECT s.*,q.`name` FROM student AS s INNER JOIN queue_info AS q ON s.q_id = q.id;
多表联查
#多表联查:和内连接差不多,都是只显示多表都能匹配上的行,只有查询的语法不同
SELECT s.*,q.* FROM student AS s,queue_info AS q WHERE s.q_id = q.id;
子查询in
//查询出的结果被用到另一个查询语句中
select*from student where q_id in(
select id from queue_info
)
合并结果集(联合查询)union
用于合并两个或者多个select语句的结果集
1 union不允许出现重复的字段组合.即union 会剔除重复的行;(去除重复的字段组合)
2 如果要允许出现重复的行,应该使用union all,即union all会列出全部的行;
注意:
union内部的每个select都必须拥有相同数量的列,列也必须拥有相似的数据类型,同时,每个select语句中的列顺序也必须相同
select c1,c2... from table1
union
select c3,c4... from table2;
数据库定义语言DDL
1 创建表 CREATE TABLE [table_name]
# PRIMARY KEY 声明主键
# ENGINE=InnoDB 声明数据库引擎
# AUTO_INCREMENT=1 声明主键自增的起始值从1开始
# CHARSET=utf8 声明字符编码
# COMMENT 字段注释
CREATE TABLE user_info(
id int(11) NOT NULL AUTO_INCREMENT COMMENT '主键',
user_name VARCHAR(55) NOT NULL COMMENT '用户名',
pass_word VARCHAR(255) NOT NULL COMMENT '密码',
type INT DEFAULT 0 COMMENT '用户类型 0-普通用户 1-管理员',
PRIMARY KEY(id)
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8
COMMENT '用户信息表';
2 删除表DROP TABLE
DROP TABLE user_info;
3 修改字段MODIFY COLUMN
# modify修改,修改表中某一字段的数据类型、长度、默认值、注释等
ALTER TABLE user_info
MODIFY COLUMN pass_word int(20) NOT NULL COMMENT '密码';
4 添加表字段ADD COLUMN
ALTER TABLE user_info
ADD COLUMN create_time datetime DEFAULT now() COMMENT '创建日期';
5 字段重命名CHANGE
# ALTER TABLE [table_name] CHANGE [old_column_name] [new_column_name] [data_type];
ALTER TABLE user_info
CHANGE old_type new_type INT DEFAULT 0 COMMENT '用户类型 0-普通用户 1-管理员';
6 删除字段
ALTER TABLE table_name
DROP COLUMN column_name;