SQL基础
CREATE DATABASE
CREATE DATABASE dbname;
创建名称为dbname的数据库
CREATE TABLE
CREATE TABLE mytable (userid INT UNSIGNED NOT NULL AUTO_INCREMENT COMMENT '用户id', email VARCHAR(256) NOT NULL COMMENT '用户邮箱', phone VARCHAR(20) NOT NULL COMMENT '用户手机号', PRIMARY KEY(userid));
创建名为mytable的数据表。数据表中有条目userid(非负整数,自增), email(字符串,最长256位),phone(字符串,最长20位),数据条目的3个域均不能为null值。userid为数据表的主键。
CREATE INDEX
CREATE INDEX index_name ON table_name (column_name);
以column_name域创建索引,允许重复值。
CREATE UNIQUE INDEX index_name ON table_name (column_name);
创建索引,但是索引值不允许重复值。
SELECT
SELECT语句是数据库最基本的操作,用来选中数据表中的特定域。
SELECT column_name1, column_name2 FROM table_name;
选中column_name1和column_name2两个域
SELECT * from table_name;
选中数据表中的所有域
SELECT INTO
SELECT column1, column2, ... INTO newtable [IN other_db] FROM table_name;
选中数据表中的条目,将结果输出到一张新表中
LIMIT
SELECT column_name1, column_name2, ... FROM table_name LIMIT number;
输出选中所有条目的前number个条目
WHERE
SELECT column_name1, column_name2 FROM table_name WHERE option;
WHERE语句用来限定选中条目的特征,例如从数据表中选出ID为某个范围的条目
ORDER BY
SELECT column_name1, column_name2 from table_name ORDER BY column_name3 DESC, column_name4 ASC;
ORDER BY语句用来限定输出的条目的顺序,以上语句首先按照column_name3域降序排列,其次按照column_name4域升序排列
INSERT INTO
INSERT INTO table_name VALUES (value1, value2, ...);
在数据表中插入新的条目,各个域的值依次为value1, value2, …
INSERT INTO table_name (column1, column2, ...) VALUES (value1, value2, ...);
插入条目,但是指定该条目的各个域的值,若某个于没有指定值,则为null或者默认值
INSERT INTO SELECT
INSERT INTO table2 SELECT * from table1;
table2与table1结构相同,将table1的所有条目复制到table2中
INSERT INTO table2 (column1_A, column2_A, ...) SELECT (column1_B, column2_B, ...) FROM table1;
将table1中选出的条目插入到table2中(table2与table1表结构可以不同)
UPDATE
UPDATE table_name SET column1=value1, column2=value2, ... WHERE option;
以上特定条目的column1域的值更新为value1, column2域的值更新为value2
DELETE
DELETE FROM table_name WHERE option;
删除数据表中满足特定条件的条目
DROP
ALTER TABLE table_name DROP INDEX inde_name;
删除数据表中的某个索引(MySql)
DROP TABLE table_name;
删除数据表
DROP DATABASE database_name;
删除数据库
TRUNCATE TABLE table_name;
删除数据表中的数据,但是不删除数据表本身
ALTER
ALTER TABLE table_name ADD column_name datatype;
在数据表中添加新域
ALTER TABLE table_name DROP COLUMN column_name;
删除数据表中的某个域
ALTER TABLE table_name MODIFY COLUMN column_name datatype;
修改数据表中某个域的数据类型(MySql)
IN
SELECT column1, column2, ... FOME table_name WHERE column_name IN (value1, value2, ...);
选中column_name域的值为value1,value2 或者…的条目
BETWEEN
SELECT column1, column2, ... FROM table_name WHERE column_name BETWEEN value1 AND value2;
选中column_name域的值在区间[value1, value2]内的条目
LIKE
SELECT column1, column2, ... FROM table_name WHERE column_name LIKE pattern;
选中数据表中column_name域具有符合pattern模式的条目
pattern中可以使用通配符,SQL通配符可以参见w3schools
IS NULL
SELECT column1, column2, ... FROM table_name WHERE column_name IS NULL
IS NULL作为WHERE筛选条件,选中数据域为NULL的条目
AS
SELECT column_name AS alias_name FROM table_name;
将column_name取别名
SELECT column_name FROM table_name AS alias_name;
将所有选出的条目作为名称为alias_name的数据表
AS的详细用法请参见w3schools
AND, OR
SELECT column1 column2, ... FROM table_name WHERE option1 AND option2;
AND和OR用来连接WHERE语句中的多个筛选条件
JOIN
JOIN语句用来合并多张表的不同域,JOIN的详细用法参见w3schools
UNION
SELECT column1, column2, ... FROM table1 UNION SELECT column1, column2, ... FROM table2;
合并table1和table2的查询结果(选中域应当一致),查询结果只包含不同的条目 如果要保留重复条目,应该使用UNION ALL
Constraint
在创建数据表时,可以使用CONSTRAINT来限定数据域的属性
NOT NULL
–> 数据域的值不可为NULLUNIQUE
–> 数据域的值不可有重复值AUTO_INCREMENT
–> 数据域的值自增(该数据域是数字类型而且为UNIQUE)PRIMARY KEY
–> 该数据域是数据表的主键(主键隐含NOT NULL和UNIQUE属性)FOREIGN KEY
–> 该数据域是另一个数据表的主键,用于链接另一个关联的数据表CHECK
–> 检查数据域的值是否满足特定条件DEFAULT
–> 设定数据域的默认值COMMENT
–> 设置数据域的注解
Comment
SQL语言中有两种添加注解的方式
--Select all:
SELECT * FROM table_name;
/* This is just comments.
You can add multiple comments like this. */
本文辑录了最常用的SQL语句,可作为SQL速查目录。本文的内容来自w3schools,更详细和高级的内容可以在那里阅读。