(根据菜鸟教程学习笔记记录)
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;
摘抄自菜鸟。。。。。
更多推荐
数据库基本语法(学习笔记)
发布评论