一、SQL常见操作
查看支持的选项
mysql --help;
链接到MYSQL SERVER
mysql -h hosts -P port - u user -p
Enter password:
退出链接:
QUIT
EXIT
创建数据库:
CREATE DATABASE database_name;
显示(切换到)数据库:
SHOW DATABASES;
USE database_name;
显示当前使用的数据库:
SELECT DATABASE();
显示数据库中的表:
SHOW TABLES;
二、数据定义语句(DDL)
创建和删除表:
CREATE TABLE table_name(character1_name type1_name(type1_length) constraint_1 constraint_2,... );
可以用desc语句验证创建的表结构:
DESC table_name;
使用alter table修改表结构:
重命名:
ALTER TABLE table_name RENAME new_name;
更改字段类型以及更改字段名:
ALTER TABLE table_name MODIFY a NEW_TYPE NEW_CONSTRAINT;
ALTER TABLE table_name CHANGE a b NEW_TYPE;
添加一个新的列:
ALTER TABLE table_name ADD newline_name NEW_TYPE;
在指定列后添加新列:
ALTER TABLE table_name ADD newline_name NEW_TYPE AFTER exist_line_name;
添加索引:
ALTER TABLE table_name ADD INDEX(character_name);
删除列:
ALTER TABLE table_name DROP COLUMN column_name;
添加一个新列,并给予新的约束:
ALTER TABLE table_name ADD character_name NEW_TYPE NEW_CONSTRAINT ,ADD PRIMARY KEY(character_name);
使用CREATE INDEX 创建索引
CREATE INDEX index_name ON table_name(character_name,...,...);
使用DROP INDEX删除索引
DROP INDEX index_name ON table_name;
修改字符集和排序规则:
ALTER TABLE table_name CHANGE character_name character_name TYPE CHARACTER SET utf8 COLLATE utf8_general_ci;
三、数据操作语句(DML)
INSERT 语句
INSERT INTO table_name(column1,column2,...)VALUES(value1,value2,...);
省略column时需要给出所有value,除非其中的某个带有默认值,可以在value中给出多条记录用于插入多条数据。
INSERT INTO table_name(column1,column2,...)
VALUES
(value1_1,value1_2,value1_3,...),
(value2_1,value2_2,value2_3,...);
修改数据(UPDATE)
UPDATE table_name SET column_name=value1,...[WHERE CONDITIONS];
删除数据(DELETE)
DELETE FROM table_name [WHERE CONDITIONS];
SELECTE语句
SELECT column_name FROM table_name [WHERE CONDITIONS];
四、SELECT 查询相关
SQL模式匹配
‘-’匹配任一一个字符,‘%’匹配任意多个字符(包括0个字符)。
SELECT * FROM table_name WHERE character_name LIKE ‘d%’;
逻辑操作符与或非(AND,OR,NOT)
SELECT* FROM table_name WHERE condition1 (AND/OR) condition2;
SELECT* FROM table_name WHERE condition1 NOT LIKE ’d%’;
范围操作符(IN和BETWEEN)
SELECT* FROM table_name WHERE character_name IN (character_arraies);
SELECT* FROM table_name WHERE character_name BETWEEN character1 AND character2;
限制获取记录数(LIMIT)
SELECT* FROM table_name LIMIT n;
排序(ORDER BY)
SELECT* FROM table_name ORDER_BY character_name ASC/DESC;//升序/降序
使用DISTINCT获取不重复的唯一值
SELECT DOSTINCT character_name FROM table_name;
聚集函数COUNT\MIN\MAX\AVG\SUM
SELECT COUNT(*) FROM table_name;
SELECT MIN\MAX(character_name)FROM table_name;
SELECT AVG\SUM(character_name )FROM table_name WHERE conditions;
分组统计GROUP BY
SELECT * FROM table_name GROUP BY character_name;
并集操作UNION和UNION ALL
SELECT * FROM table1_name UNION SELECT * FROM table2_name;
SELECT * FROM table1_name UNION ALL SELECT* FROM table2_name;
二者的都是将两个结果集进行合并,但UNION ALL 会更快,UNION实际上是UNION DISTINCT。
NULL值
SELECT *FROM table_name WHERE character_name IS (NOT) NULL;
对于GROUP BY ,两个NULL可以认为是相等的。
对于 ORDER BY ... ASC NULL 总在前,对于ORDER BY ... DESC NULL 总在后。
0或空字符串是有值的,所以在一个NOT NULL 的列插入0或空字符是允许的。
五、JOIN(链接)
内链接([INNER] JOIN)
显式链接符号,即显式地使用JOIN 关键字:
SELECT
Character_name ...
FROM
Table1_name
INNER JOIN
Table2_name
ON
table1_name.character_name = table2_name.character_name;
WHERE conditions;
隐式链接符号,即:
SELECT
Character_name ...
FROM
Table1_name,Table2_name
WHERE
table_name.character_name = table_name.character_name;
交叉链接(笛卡尔积)
把表是为行记录的集合,交叉链接返回这两个集合的笛卡尔积。其实相当于内连接的链接条件为永真、或者链接条件不存在:
SELECT * FROM table1_name JOIN table2_name;
SELECT * FROM table1_name,table2_name
左外链接(LEFT JOIN)
若A、B两表进行左外链接,那么结果表中将包含左表(A表)的所有记录,即使那些记录仪在右表(B表) 中没有符合链接条件的匹配。
SELECT
Character1_name,character2_name ...
FROM
Table1_name
LEFT JOIN
Table2_name
ON
Table1_name.character_name = table2_name.character_name
WHERE
Conditions;
右外链接(RIGHT JOIN)
若A、B两表进行左外链接,那么结果表中将包含右表(B表)的所有记录,即使那些记录在左表(A表) 中没有符合链接条件的匹配。
SELECT
*
FROM
Table1_name
RIGHT JOIN
Table2_name
ON
Table1_name.character_name=table2_name.character_name;
六、子查询
即SELECT 语句的嵌套使用:
SELECT
*
FROM
Table1_name
WHERE
Character_name IN (
SELECT
Character_name
FROM
Table2_name
WHERE
Conditions);