MySQL 极速指南 1——标准 SQL 语句

可以把 SQL 分为两个部分:数据操作语言 (DML) 和 数据定义语言 (DDL)。DML 主要用于查询和更新;DDL 使我们有能力创建或删除表格。我们也可以定义索引(键),规定表之间的链接,以及施加表间的约束。

查询和更新指令构成了 SQL 的 DML 部分:

  • SELECT - 从数据库表中获取数据
  • UPDATE - 更新数据库表中的数据
  • DELETE - 从数据库表中删除数据
  • INSERT INTO - 向数据库表中插入数据

DDL 语句:

  • CREATE DATABASE - 创建新数据库
  • CREATE TABLE - 创建新表
  • CREATE INDEX - 创建索引(搜索键)
  • ALTER DATABASE - 修改数据库
  • ALTER TABLE - 变更(改变)数据库表
  • DROP TABLE - 删除表
  • DROP INDEX - 删除索引

|ID|Lastname|Firstname|Address|City |
|--|
|01|Adams| John| Oxford Street| London
|02|Bush| George| Fifth Avenue| New York
|03|Carter| Thomas| Changan Street| Beijing
|04|Carter| William| Xuanwumen 10| Beijing

数据操作指令 DML

Select

  • distinct 返回不同的值
SELECT DISTINCT Firstname FROM Person #选中Firstname中的不同的值    
  • Top子句,用来限制返回的数据条数,对于与表中数据行数很多的时候特别有用
SELECT TOP 2 * FROM Person    #返回表中的前两行数据 
SELECT TOP 30 PERCENT * FROM Person #返回表中前30%的数据行  
  • select into 复制表
SELECT * INTO Persons_backup FROM Persons
SELECT * INTO Persons IN 'Backup.mdb' FROM Persons
  • WHERE

|操作符|描述|
|--|
|= |等于|
|<>或者!= |不等于
|> |大于
|< |小于
|>=| 大于等于
|<= |小于等于
|BETWEEN| 在某个范围内
|LIKE| 搜索某种模式

SELEECT * FROM Person WHERE City LIKE '%lon%'   #City列里包含字符串lon的行    
SELEECT * FROM Person WHERE City LIKE 'lon%'    #City列里最前面是字符串lon的行
SELEECT * FROM Person WHERE City NOT LIKE 'lon%'    #City列里没有字符串lon的行

通配符不止有%(通配一个或多个字符)还有_(一个字符),[charlist](在charlist字符列中的任一单字),[^charlist]或者[!charlist](不在字符列中的任一单字),参看正则表达式。

SELEECT * FROM Person WHERE City LIKE 'londo_'  #City列里除最后一个字符以外是londo的行  
SELEECT * FROM Person WHERE City LIKE '[lnb]%'   #City列里以l或n或b开头的行 
SELEECT * FROM Person WHERE City LIKE '[^lnb]%'   #City列里不以l或n或b开头的行 
  • WHERE...IN (,)操作符|筛选出WHERE指定的列中IN中含有的值
SELEECT * FROM Person WHERE City IN ('london','new york') #City列里的值为london或者new york的行
  • WHERE...BETWEEN value1 AND value2 操作符|筛选出WHERE指定的列中从value1(包含)到value2(不包含)的行
    不同的数据库这种包含关系是不一样的,具体要看使用哪种数据库
SELEECT * FROM Person WHERE City BETWEEN london AND beijing  #返回下表

|ID|Lastname|Firstname|Address|City |
|--|
|01|Adams| John| Oxford Street| London
|02|Bush| George| Fifth Avenue| New York

  • as
    别名,select lastname as la from table_a

INSERT INTO...VALUES...

INSERT INTO Person (Lastname,Firstname) VALUES (value1,value2)

UPDATE...SET...

UPDATE Person SET FirstName = 'Fred' WHERE LastName = 'Wilson' 

DELETE

DELETE FROM Person WHERE LastName = 'Wilson'    

结构指令DDL:

  1. CREATE DATABASE
  2. CREATE TABLE
  3. ALTER DATABASE
  4. ALTER TABLE
    ALTER TABLE 用于更改原有表的结构。例如,您可以增加或删减列,创建或取消索引,更改原有列的类型,或重新命名列或表。您还可以更改表的评注和表的类型。您可以在一个ALTER TABLE语句里写入多个ADD, ALTER, DROP和CHANGE子句,中间用逗号分开。这是MySQL相对于标准SQL的扩展。在标准SQL中,每个ALTER TABLE语句中每个子句只允许使用一次。 要使用ALTER TABLE,您需要获得表的ALTER, INSERT和CREATE权限。
/*在表Persons中添加Birthday列,数据类型为int,date,str;改变Birthday列的数据类型为year*/    
ALTER TABLE Persons ADD Birthday datatype(int,date,str),ALTER COLUMN Birthday year;

改变一个表的默认字符集:
ALTER TABLE tbl_name DEFAULT CHARACTER SET utf-8;

  1. DROP TABLE
  2. CREATE INDEX
  3. DROP INDEX

join 链接

用于将两个表链接显示多个表的结果
现在有另外一个表Order:

Id_O OrderNo ID
1 77895 3
2 44678 3
3 22456 1
5 34764 65

ID是外键,链接了两个表。现找出谁订购了产品,订购了哪些产品

SELECT Person.Lastname,Person.Firstname,Order.OrderNO FROM Person,Order WHERE Person.ID=Order.ID

返回结果:

LastName| FirstName| OrderNo
----|
Adams| John| 22456
Adams| John| 24562
Carter| Thomas |77895
Carter| Thomas| 44678

  • .JOIN: 如果表中有至少一个匹配,则返回行
  • LEFT JOIN: 即使右表中没有匹配,也从左表返回所有的行
  • RIGHT JOIN: 即使左表中没有匹配,也从右表返回所有的行
  • FULL JOIN: 只要其中一个表中存在匹配,就返回行
    上述返回还可以通过下面的JOIN表示法表示:
SELECT Persons.LastName, Persons.FirstName, Orders.OrderNo
FROM Persons
INNER JOIN Orders(FULL JOIN Orders,LEFT JOIN Orders,RIGHT JOIN Orders)
ON Persons.ID = Orders.ID
ORDER BY Persons.LastName

union

返回多个表的值

SELECT E_Name FROM Employees_China
UNION
SELECT E_Name FROM Employees_USA

函数

  • group by
  • having 跟 group by 配套使用,代替 where 用法
  • ucase 大写
  • lcase 小写
  • mid 提取部分字符串

索引 (index)

索引是表中一列或多列数据和指向这些数据页的逻辑指针清单。创建索引时,将这些数据这些排序,用关联的指针直接定位要查找的值,从而提升了查询速度。 所以索引的创建是为数据库的执行速度和性能服务的,他具体的好处有:

  1. 加速数据的检索速度
  2. 创建唯一性索引能保证数据库表中每一行数据的唯一性
  3. 加速表之间的连接速度
  4. 加快分组和排序的速度

由于索引的创建要消耗物理空间,所以过多的索引会引出如下问题:

  1. 占据空间
  2. 反而会降低增删改查的速度,同时数据改变的时候,因为他要更新关联的索引,也会影响性能
CREATE INDEX PersonIndex    #在person表的LastName,Fistname列创建索引,以Lastname降序排序
ON Person (Lastname DESC,Firstname)     

DROP INDEX Person.PersonIndex  #删除索引

视图(views)

视图就是一个虚拟的表,其内容由查询定义。对表能够进行的一般操作(增删改查)都可以应用于视图。 视图内其实没有存储任何数据,它只是对表的一个查询。

优点:

  1. 安全,提供了另外一种级别的表安全性
  2. 虚拟,隐藏的数据的复杂性
  3. 简化,简化的用户的SQL命令
  4. 重命名,通过重命名列,从另一个角度提供数据
CREATE VIEW [Current Product List] AS
SELECT ProductID,ProductName
FROM Products
WHERE Discontinued=No

存储过程(Stored Procedure)

是一组为了完成特定功能的SQL语句集,由流控制和SQL语句书写构成。

优点:

  1. 加快执行速度。存储过程只在创建时编译,而sql语句每次执行都要编译
  2. 可以重复使用
  3. 安全性高,可设定使用权。
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 202,723评论 5 476
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,080评论 2 379
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 149,604评论 0 335
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,440评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,431评论 5 364
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,499评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,893评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,541评论 0 256
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,751评论 1 296
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,547评论 2 319
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,619评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,320评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,890评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,896评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,137评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,796评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,335评论 2 342

推荐阅读更多精彩内容