马哥学习笔记十五——MySQL进阶之SQL语句
数据库:
create database|schema [if not exists] db_name [character set =] [collate =];
alter database
drop {database | schema} [if exists] db_name;
表:
1、直接定义一张空表;
2、从其它表中查询出数据,并以之创建新表;
3、以其它表为模板创建一个空表;
CREATE TABLE [IF NOT EXISTS] tb_name (col_name col_defination, constraint )
CREATE TABLE tb1 (id INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY, Name CHAR(20) NOT NULL, Age TINYINT NOT NULL) ENGINE [=] engine_name;
CREATE TABLE tb2 (id INT UNSIGNED NOT NULL AUTO_INCREMENT, Name CHAR(20) NOT NULL, Age TINYINT NOT NULL, PRIMARY KEY(id),UNIQUE KEY(name),INDEX(age));
单字段: PRIMARY KEY UNIQUE KEY
单或多字段: PRAMARY KEY (col,...) UNIQUE KEY (col,...) INDEX (col,...)
键也称作约束,可用作索引,属于特殊索引(有特殊限定):B+Tree
SHOW INDEXES FROM tb_name:显示指定表上的索引
索引创建:
CREATE INDEX index_name ON tb_name (col,...);
col_name [(length)] [ASC | DESC]
查询语句类型:
简单查询
多表查询
子查询
SELECT field1,field2 FROM tb_name; 投影
SELECT [DISTINCT] * FROM tb_name WHERE qualification; 选择
distinct:相同的值只显示一次
FROM子句: 要查询的关系 表、多个表、其它SELECT语句
WHERE子句:
布尔关系表达式 =、>、>=、<=、<
逻辑关系: AND OR NOT
BETWEEN ... AND ...
LIKE ‘’
%: 任意长度任意字符
_:任意单个字符
REGEXP, RLIKE:支持正则表达式
IN:离散取值
IS NULL
IS NOT NULL
ORDER BY field_name {ASC|DESC}:将查询后的数据进行排序
字段别名:AS
LIMIT子句:LIMIT [offset,]Count
聚合函数:SUM(), MIN(), MAX(), AVG(), COUNT()
GROUP BY: 分组
HAVING qualification:对分组过滤
多表查询:
连接:
交叉连接:笛卡尔乘积
自然连接:
外连接:
左外连接:... LEFT JOIN ... ON ...
右外连接: ... RIGHT JOIN ... ON ...
自连接:
子查询:
比较操作中使用子查询:
子查询只能返回单个值;
IN(): 使用子查询;
在FROM中使用子查询;
联合查询: UNION
视图: 存储下来的SELECT语句;
基于基表的查询结果;
VIEW
CREATE VIEW
物化视图:SELECT
SHOW CREATE:显示创建过程
mysql -e 'SQL语句':在shell命令函中执行SQL语句
广义查询:
DML:
DELETE
INSERT INTO
UPDATE
INSERT INTO tb_name (col1, col2, ...) VALUES (val1, val2, ...)[,(val1, val2, ...),...]
字符型:单引号
数值型:不需要引号
日期时间型:
空值:NULL, ''
REPLACE INTO
DELETE: DELETE FROM tb_name WHERE condition;
TRUNCATE tb_name: 清空表,并重置AUTOINCREMENT计数器;
UPDATE tb_name SET col1=..., col2=... WHERE