sql注意事项:
- SQL 对大小写不敏感:SELECT 与 select 是相同的
- 某些数据库系统要求在每条 SQL 语句的末端使用分号。
CREATE DATABASE
CREATE DATABASE 语句用于创建数据库。
CREATE DATABASE dbname;
CREATE TABLE
CREATE TABLE 语句用于创建数据库中的表。
表由行和列组成,每个表都必须有个表名。
CREATE TABLE table_name
(
column_name1 data_type(size),
column_name2 data_type(size),
column_name3 data_type(size),
....
);
column_name 参数规定表中列的名称。
data_type 参数规定列的数据类型(例如 varchar、integer、decimal、date 等等)。
size 参数规定表中列的最大长度。
CREATE INDEX
在表上创建一个简单的索引。允许使用重复的值:
CREATE INDEX index_name
ON table_name (column_name)
在表上创建一个唯一的索引。不允许使用重复的值:
CREATE UNIQUE INDEX index_name
ON table_name (column_name)
您可以在表中创建索引,以便更加快速高效地查询数据。
用户无法看到索引,它们只能被用来加速搜索/查询。
注释:更新一个包含索引的表需要比更新一个没有索引的表花费更多的时间,这是由于索引本身也需要更新。因此,理想的做法是仅仅在常常被搜索的列(以及表)上面创建索引。
ALTER TABLE
ALTER TABLE 语句用于在已有的表中添加、删除或修改列。
添加列:
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
DROP 和 TRUNCATE
通过使用 DROP 语句,可以轻松地删除索引、表和数据库。
删除数据库:
DROP DATABASE database_name
删除索引(mysql):
ALTER TABLE table_name DROP INDEX index_name
删除表:
DROP TABLE table_name
如果我们仅仅需要删除表内的数据,但并不删除表本身,那么我们该如何做呢?
请使用 TRUNCATE TABLE 语句:
TRUNCATE TABLE table_name
TRUNCATE TABLE语句同时能清空主键。
SELECT
SELECT 语句用于从数据库中选取数据。
SELECT column_name,column_name
FROM table_name;
与
SELECT * FROM table_name;
INSERT INTO
INSERT INTO 语句用于向表中插入新记录。
INSERT INTO table_name (column1,column2,column3,...)
VALUES (value1,value2,value3,...);
从一个表复制数据,然后把数据插入到一个已存在的表:
Insert into Table2(field1,field2,…) select value1,value2,… from Table1 where condition;
如果两个表的表结构一样,可以省略为:
Insert into Table2 select * from Table1;
UPDATE
UPDATE 语句用于更新表中已存在的记录。
UPDATE table_name
SET column1=value1,column2=value2,...
WHERE some_column=some_value;
请注意 SQL UPDATE 语句中的 WHERE 子句!
WHERE 子句规定哪条记录或者哪些记录需要更新。如果您省略了 WHERE 子句,所有的记录都将被更新!
按指定条件update:
UPDATE table_name
SET COLUMN = (
CASE
WHEN 条件 THEN 结果
WHEN 条件 THEN 结果
...
ELSE 结果
END
)
WHERE
some_column = some_value;
更新字段部分内容:
UPDATE 表名 SET 字段名 = REPLACE(object, 'search', 'replace'); update info set name = REPLACE(name,'Beijing','BJ') where name like 'Beijing%'; 扩展:update `news` set `content`=replace(`content`,' ','');//清除news表中content字段中的空格
DELETE
DELETE 语句用于删除表中的行。
DELETE FROM table_name
WHERE some_column=some_value;
请注意 SQL DELETE 语句中的 WHERE 子句!
WHERE 子句规定哪条记录或者哪些记录需要删除。如果您省略了 WHERE 子句,所有的记录都将被删除!
SELECT DISTINCT
在表中,一个列可能会包含多个重复值,有时您也许希望仅仅列出不同(distinct)的值。
DISTINCT 关键词用于返回唯一不同的值。
SELECT DISTINCT column_name,column_name
FROM table_name;
ORDER BY
ORDER BY 关键字用于对结果集按照一个列或者多个列进行排序。
ORDER BY 关键字默认按照升序对记录进行排序。如果需要按照降序对记录进行排序,您可以使用 DESC 关键字。
SELECT column_name,column_name
FROM table_name
ORDER BY column_name,column_name ASC|DESC;
如果要按照指定顺序排序,则使用 ORDER BY FIELD,例:
--id字段按照5,3,7,1排序
ORDER BY FIELD(`id`, 5, 3, 7, 1)
LIMIT
LIMIT 关键字用于规定要返回的记录的数目。
SELECT column_name(s)
FROM table_name
LIMIT number;
LIMIT关键字用于msyql数据库,oracle数据库使用ROWNUM关键字,用法:
SELECT column_name(s)
FROM table_name
WHERE ROWNUM <= number;
LIKE
LIKE 操作符用于在 WHERE 子句中搜索列中的指定模式。
SELECT column_name(s)
FROM table_name
WHERE column_name LIKE pattern;
pattern为指定的模式,通常使用通配符来表示:
- %:替代0个或多个字符
- _:替代一个字符
IN 和 NOT IN
IN 操作符允许您在 WHERE 子句中规定多个值。
NOT IN 操作符允许您在 WHERE 子句中排除多个值。
SELECT column_name(s)
FROM table_name
WHERE column_name IN (value1,value2,...);
BETWEEN 和 NOT BETWEEN
BETWEEN 操作符选取介于两个值之间的数据范围内的值。这些值可以是数值、文本或者日期。
NOT BETWEEN 操作符选取不介于两个值之间的数据范围内的值
SELECT column_name(s)
FROM table_name
WHERE column_name BETWEEN value1 AND value2;
JOIN 和 INNER JOIN
JOIN 子句用于把来自两个或多个表的行结合起来,基于这些表之间的共同字段。
INNER JOIN 关键字在表中存在至少一个匹配时返回行。
注释:INNER JOIN 与 JOIN 是相同的。
SELECT column_name(s)
FROM table1
JOIN table2
ON table1.column_name=table2.column_name;
LEFT JOIN
LEFT JOIN 关键字从左表(table1)返回所有的行,即使右表(table2)中没有匹配。如果右表中没有匹配,则结果为 NULL。
SELECT column_name(s)
FROM table1
LEFT JOIN table2
ON table1.column_name=table2.column_name;
两表关联,查询左表独有的数据:
select * from t1 left join t2 on t1.id = t2.id where t2.id is null;
RIGHT JOIN
RIGHT JOIN 关键字从右表(table2)返回所有的行,即使左表(table1)中没有匹配。如果左表中没有匹配,则结果为 NULL。
SELECT column_name(s)
FROM table1
RIGHT JOIN table2
ON table1.column_name=table2.column_name;
两表关联,查询右表独有的数据:
select * from t1 right join t2 on t1.id = t2.id where t1.id is null;
FULL JOIN
只要其中某个表存在匹配,FULL JOIN 关键字就会返回行。
oracle里面有full join,但是在mysql中没有full join。我们可以使用union来达到目的。
select * from t1 left join t2 on t1.id = t2.id
union
select * from t1 right join t2 on t1.id = t2.id;
UNION 和 UNION ALL
UNION 操作符用于合并两个或多个 SELECT 语句的结果集。
请注意,UNION 内部的每个 SELECT 语句必须拥有相同数量的列。列也必须拥有相似的数据类型。同时,每个 SELECT 语句中的列的顺序必须相同。
SELECT column_name(s) FROM table1
UNION
SELECT column_name(s) FROM table2;
注释:默认地,UNION 操作符选取不同的值。如果允许重复的值,请使用 UNION ALL。
SELECT column_name(s) FROM table1
UNION ALL
SELECT column_name(s) FROM table2;
INSERT INTO SELECT
INSERT INTO SELECT 语句从一个表复制数据,然后把数据插入到一个已存在的表中。目标表中任何已存在的行都不会受影响。
我们可以从一个表中复制所有的列插入到另一个已存在的表中:
INSERT INTO table2
SELECT * FROM table1;
或者我们可以只复制希望的列插入到另一个已存在的表中:
INSERT INTO table2
(column_name(s))
SELECT column_name(s)
FROM table1;
IS NULL 和 IS NOT NULL
IS NULL操作符用于选取某一列的值为NULL的记录:
SELECT * FROM table WHERE column IS NULL
IS NOT NULL操作符用于选取某一列的值不为NULL的记录:
SELECT * FROM table WHERE column IS NOT NULL
参考: