(根据菜鸟教程学习笔记记录)

1、在sql的like模糊查询中:_代表单个字符;%可以代表多个

2、ORDER BY 多列的时候,先按照第一个column name排序,再按照第二个column name排序;
ORDER BY 排列时,不写明ASC DESC的时候,默认是ASC。(Group by同理)

3、没有指定要插入数据的列名的形式需要列出插入行的每一列数据

INSERT INTO table_name (column1,column2,column3,...)
VALUES (value1,value2,value3,...);

4、insert into select 和select into from 的区别

insert into scorebak select * from socre where neza='neza'   --插入一行,要求表scorebak 必须存在
select *  into scorebak from score  where neza='neza'  --也是插入一行,要求表scorebak 不存在

5、WHERE 子句规定哪条记录或者哪些记录需要更新。如果您省略了 WHERE 子句,所有的记录都将被更新!

UPDATE table_name
SET column1=value1,column2=value2,...
WHERE some_column=some_value;

6、执行没有 WHERE 子句的 UPDATE 要慎重,再慎重。
在 MySQL 中可以通过设置 sql_safe_updates 这个自带的参数来解决,当该参数开启的情况下,你必须在update 语句后携带 where 条件,否则就会报错。
set sql_safe_updates=1; 表示开启该参数

7、DELETE 语句用于删除表中的行

DELETE FROM table_name
WHERE some_column=some_value;

8、您可以在不删除表的情况下,删除表中所有的行。这意味着表结构、属性、索引将保持不变

DELETE FROM table_name;
或
DELETE * FROM table_name;

9、SELECT TOP 子句用于规定要返回的记录的数目。
注意:并非所有的数据库系统都支持 SELECT TOP 语句。 MySQL 支持 LIMIT 语句来选取指定的条数数据, Oracle 可以使用 ROWNUM 来选取。

mysql:
SELECT column_name(s)
FROM table_name
LIMIT number;

Oracle:
SELECT column_name(s)
FROM table_name
WHERE ROWNUM <= number;

10、通过使用 NOT 关键字,您可以选取不匹配模式的记录

SELECT * FROM Websites
WHERE name NOT LIKE '%oo%';

11、下面的 SQL 语句选取 name 不以 A 到 H 字母开头的网站

SELECT * FROM Websites
WHERE name REGEXP '^[^A-H]';

下面的 SQL 语句选取 name 以 “G”、“F” 或 “s” 开始的所有网站:

SELECT * FROM Websites
WHERE name REGEXP '^[GFs]';

12、IN 操作符允许您在 WHERE 子句中规定多个值。

SELECT column_name(s)
FROM table_name
WHERE column_name IN (value1,value2,...);

13、别名

SELECT w.name, w.url, a.count, a.date 
FROM Websites AS w, access_log AS a 
WHERE a.site_id=w.id and w.name="菜鸟教程";

三个列(url、alexa 和 country)结合在一起,并创建一个名为 "site_info" 的别名
SELECT name, CONCAT(url, ', ', alexa, ', ', country) AS site_info
FROM Websites;

14、INNER JOIN 关键字在表中存在至少一个匹配时返回行。

SELECT column_name(s)
FROM table1
INNER JOIN table2
ON table1.column_name=table2.column_name;

15、 UNION ALL 从 “Websites” 和 “apps” 表中选取所有的中国(CN)的数据(也有重复的值):

SELECT country, name FROM Websites
WHERE country='CN'
UNION ALL
SELECT country, app_name FROM apps
WHERE country='CN'
ORDER BY country;

16、MySQL 数据库不支持 SELECT … INTO 语句,但支持 INSERT INTO … SELECT 。

17、null约束

在一个已创建的表的 "Age" 字段中添加 NOT NULL 约束如下所示:
ALTER TABLE Persons
MODIFY Age int NOT NULL;

在一个已创建的表的 "Age" 字段中删除 NOT NULL 约束如下所示:
ALTER TABLE Persons
MODIFY Age int NULL;

18、外键约束

添加
ALTER TABLE Orders
ADD FOREIGN KEY (P_Id)
REFERENCES Persons(P_Id)

删除
ALTER TABLE Orders
DROP FOREIGN KEY fk_PerOrders

19、删除表内的数据,但并不删除表本身

TRUNCATE TABLE table_name

20、DROP TABLE 语句用于删除表

DROP TABLE table_name

21、在 “Persons” 表中添加一个名为 “DateOfBirth” 的列

ALTER TABLE Persons
ADD DateOfBirth date

22、改变 “Persons” 表中 “DateOfBirth” 列的数据类型

ALTER TABLE Persons
ALTER COLUMN DateOfBirth year

23、删除 “Person” 表中的 “DateOfBirth” 列

ALTER TABLE Persons
DROP COLUMN DateOfBirth

24、ROUND() - 对某个数值字段进行指定小数位数的四舍五入

25、统计 access_log 各个 site_id 的访问量

SELECT site_id, SUM(access_log.count) AS nums
FROM access_log GROUP BY site_id;

26、查找总访问量大于 200 的网站

SELECT Websites.name, Websites.url, SUM(access_log.count) AS nums FROM (access_log
INNER JOIN Websites
ON access_log.site_id=Websites.id)
GROUP BY Websites.name
HAVING SUM(access_log.count) > 200;

27、查找总访问量大于 200 的网站,并且 alexa 排名小于 200

SELECT Websites.name, SUM(access_log.count) AS nums FROM Websites
INNER JOIN access_log
ON Websites.id=access_log.site_id
WHERE Websites.alexa < 200 
GROUP BY Websites.name
HAVING SUM(access_log.count) > 200;

摘抄自菜鸟。。。。。

更多推荐

数据库基本语法(学习笔记)