本文共 6383 字,大约阅读时间需要 21 分钟。
- sql语句对大小写是不敏感的, select 和SELECT都是可以的。
- 一些重要的sql命令
-
- SELECT - 从数据库中提取数据
- UPDATE - 更新数据库中的数据
- DELETE - 从数据库中删除数据
- INSERT INTO - 向数据库中插入新数据
- CREATE DATABASE - 创建新数据库
- ALTER DATABASE - 修改数据库
- CREATE TABLE - 创建新表
- ALTER TABLE - 变更(改变)数据库表
- DROP TABLE - 删除表
- CREATE INDEX - 创建索引(搜索键)
- DROP INDEX - 删除索引
- select
-
- * 是用来查询所有
- 也可以指定几个字段来查询
- distinct 去除重复值
- where 查询条件
-
- 可能用到的运算符
-
- SELECT * FROM Websites WHERE country='CN';
- order by 对查询结果进行排序, 也可以对多列进行排序。
- insert into
-
- 可一条语句插入多条
-
- insert into websites values('6','百度','https://www.baidu.com','5','CN’),('6','百度','https://www.baidu.com','5','CN’);
- 注意一点就是每个值之间的逗号左右不要有空格
- update
-
- UPDATE Websites SET alexa='5000', country='USA' WHERE name='菜鸟教程';
- 注意一定要加where子句,否则会更改所有的数据。
- delete
-
- DELETE FROM Websites WHERE name='百度' AND country='CN';
- 删除所有数据
-
- DELETE FROM table_name;
- DELETE * FROM table_name;
- select top子句
-
- 说明:
-
- sql server 和 access的执行是select top
- my sql的是用limit子句
- oracle的是 where ROWNUM <= 5
- e.g.:
-
- mysql : SELECT * FROM Persons LIMIT 5;
- oracle: SELECT * FROM Persons WHERE ROWNUM <=5;
- like
-
- 格式:SELECT column_name(s) FROM table_name WHERE column_name LIKE pattern;
- like 后面是接通配符的。
-
- like前面可以接not ,这样则选取不在通配符表示范围以内的字符
- 通配符
-
- %替代0个或多个字符
- _ 替代一个字符
- [charlist] 字符列表中的任何单一字符
-
- MySQL 中使用 REGEXP 或 NOT REGEXP 运算符 (或 RLIKE 和 NOT RLIKE) 来操作正则表达式。
- 实例
-
- SELECT * FROM Websites WHERE name REGEXP '^[GFs]’; 选取 name 以 "G"、"F" 或 "s" 开始的所有网站
- SELECT * FROM Websites WHERE name REGEXP '^[A-H]’; 选取 name 以 A 到 H 字母开头的网站
- [^charlist] 或 [!charlist] 不在字符列表中的任何单一字符
-
- SELECT * FROM Websites WHERE name REGEXP '^[^A-H]’; 选取 name 不以 A 到 H 字母开头的网站
- in 操作符
-
- 语法:
-
- SELECT column_name(s) FROM table_name WHERE column_name IN (value1,value2,...);
- 实例
-
- SELECT * FROM Websites WHERE name IN ('Google','菜鸟教程');
- between
-
- 语法:
-
- SELECT column_name(s) FROM table_name WHERE column_name BETWEEN value1 AND value2;
- 实例
-
- SELECT * FROM Websites WHERE alexa BETWEEN 1 AND 20;
- SELECT * FROM Websites WHERE alexa NOT BETWEEN 1 AND 20;
- 别名
-
- 说明:查询的时候可以为表象和字段名取一个别名
- 使用:在表名和字段名后加as aliasName
- 实例:
-
- SELECT name AS n, country AS c FROM Websites;
- 把三个字段结合在一起,并创建一个别名
-
- SELECT name, CONCAT(url, ', ', alexa, ', ', country) AS site_info FROM Websites;
- Join
- INNER JOIN:如果表中有至少一个匹配,则返回行
- LEFT JOIN:即使右表中没有匹配,也从左表返回所有的行
- RIGHT JOIN:即使左表中没有匹配,也从右表返回所有的行
- FULL JOIN:只要其中一个表中存在匹配,则返回行
- inner join
-
- inner join 与join相同
- 图例
-
-
- 语法:
-
- SELECT column_name(s) FROM table1 INNER JOIN table2 ON table1.column_name=table2.column_name;
- SELECT column_name(s) FROM table1 JOIN table2 ON table1.column_name=table2.column_name;
- 示例
-
- SELECT , access_log.count, access_log.date FROM Websites INNER JOIN access_log ON Websites.id=access_log.site_id ORDER BY access_log.count;
- left join
-
- 说明:LEFT JOIN 关键字从左表(table1)返回所有的行,即使右表(table2)中没有匹配。如果右表中没有匹配,则结果为 NULL。
- 语法:
-
- SELECT column_name(s) FROM table1 LEFT JOIN table2 ON table1.column_name=table2.column_name;
- SELECT column_name(s) FROM table1 LEFT OUTER JOIN table2 ON table1.column_name=table2.column_name;
- 图示
-
- 示例:
-
- SELECT , access_log.count, access_log.date FROM Websites LEFT JOIN access_log ON Websites.id=access_log.site_id ORDER BY access_log.count DESC;
- right join
-
- 说明:RIGHT JOIN 关键字从右表(table2)返回所有的行,即使左表(table1)中没有匹配。如果左表中没有匹配,则结果为 NULL。
- 语法
-
- SELECT column_name(s) FROM table1 RIGHT JOIN table2 ON table1.column_name=table2.column_name;
- SELECT column_name(s) FROM table1 RIGHT OUTER JOIN table2 ON table1.column_name=table2.column_name;
- 图示:
-
- 示例:
-
- SELECT Websites.name, access_log.count, access_log.dateFROM access_logRIGHT JOIN WebsitesON access_log.site_id=Websites.idORDER BY access_log.count DESC;
- full outer join
-
- 说明
-
- FULL OUTER JOIN 关键字只要左表(table1)和右表(table2)其中一个表中存在匹配,则返回行. FULL OUTER JOIN 关键字结合了 LEFT JOIN 和 RIGHT JOIN 的结果。
- 语法:
-
- SELECT column_name(s) FROM table1 FULL OUTER JOIN table2 ON table1.column_name=table2.column_name;
- 图示:
-
- 示例
-
- SELECT , access_log.count, access_log.date FROM Websites FULL OUTER JOIN access_log ON Websites.id=access_log.site_id ORDER BY access_log.count DESC;
- union操作符
-
- 说明 :用来合并两个或多个 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;
- 示例:
-
- 从 "Websites" 和 "apps" 表中选取所有不同的country(只有不同的值)
- SELECT country FROM Websites UNION SELECT country FROM apps ORDER BY country;
- select into
-
- MySQL 数据库不支持 SELECT ... INTO 语句,但支持 。
- 当然你可以使用以下语句来拷贝表结构及数据: CREATE TABLE 新表 SELECT * FROM 旧表
- 语法:
-
- SELECT * INTO newtable [IN externaldb] FROM table1;
- 或者只复制希望的列插入新表中
- SELECT column_name(s) INTO newtable [IN externaldb] FROM table1;
- Create Table
-
- CREATE TABLE Persons
- (
- PersonID int,
- LastName varchar(255),
- FirstName varchar(255),
- Address varchar(255),
- City varchar(255)
- );
- SQL约束
-
- 说明:用来给字段建立约束,如果违反,则不可以操作。
- 语法:
-
- CREATE TABLE table_name(
- column_name1 data_type(size) constraint_name,
- column_name2 data_type(size) constraint_name,
- column_name3 data_type(size) constraint_name,
- ....);
- 约束规则
-
- not null
- unique
- primary key
- foreign key
- check 保证列中的值符合指定条件
- default 给定默认值
- primary key
-
- 特性:
-
- 用处
-
- create table
- alter table person add primary key id
- 撤销
-
- alter table person drop primary key
- foreign key
-
- 外表中的关键字
- 添加关键字e.g.
-
- CREATE TABLE Orders(
- O_Id int NOT NULL,
- OrderNo int NOT NULL,
- P_Id int,
- PRIMARY KEY (O_Id),
- FOREIGN KEY (P_Id) REFERENCES Persons(P_Id))
- 撤销关键字e.g.
-
- ALTER TABLE Orders
- DROP FOREIGN KEY fk_PerOrders
- check
-
- 说明:
-
- 示例1:
-
- CREATE TABLE Persons(
- P_Id int NOT NULL,
- LastName varchar(255) NOT NULL,
- FirstName varchar(255),
- Address varchar(255),
- City varchar(255),
- CHECK (P_Id>0))
- 示例2:
-
- ALTER TABLE Persons
- DROP CHECK chk_Person
- 索引
-
- 使查询更加快速
- 语法: create index PIndex on tablename(字段1,字段2);
- Drop
-
- 可以执行多种删除操作
-
- 如果只是删除表中的数据而不删除表
-
- alter
-
- auto-increament
-
- 用法:
-
- create table Persons(id int auto_increment);
- alter table Person auto_increament = 100;
- 视图 Views
-
- 说明:是基于SQL语句的结果集的可视化的表。可以当表来使用。
- 语法:
-
- CREATE VIEW view_name AS
- SELECT column_name(s)
- FROM table_name
- WHERE condition
- 注意:视图总是显示最新的数据!每当用户查询视图时,数据库引擎通过使用视图的 SQL 语句重建数据。
- 撤销视图:drop view viewName
- date
-
- 数据类型
-
- null
-
- is null
- is not null
- 以上两个会在select查询判断中使用到。
- null函数
-
- isnull()
- nvl()
- ifnull()
- coalesce()
- MySql中的数据类型
-
- 函数
-
- 集合
-
- AVG() - 返回平均值
- COUNT() - 返回行数
- FIRST() - 返回第一个记录的值
- LAST() - 返回最后一个记录的值
- MAX() - 返回最大值
- MIN() - 返回最小值
- SUM() - 返回总和
- 标量
-
- UCASE() - 将某个字段转换为大写
- LCASE() - 将某个字段转换为小写
- MID() - 从某个文本字段提取字符
- LEN() - 返回某个文本字段的长度
- ROUND() - 对某个数值字段进行指定小数位数的四舍五入
- NOW() - 返回当前的系统日期和时间
- FORMAT() - 格式化某个字段的显示方式
转载地址:http://kldrf.baihongyu.com/