MySql之SQL语句学习笔记(一)

文章摘要:
1、SELECT
2、DISTINCT 语句
3、WHERE 子句
4、引号的使用
5、AND 和 OR 运算符
6、ORDER BY
7、INSERT INTO 语句
8、UPDATE 语句
9、DELETE 语句
10、TOP 子句
11、LIKE 操作符
12、SQL 通配符
13、IN 操作符
14、BETWEEN
15、SQL Alias(别名)


SQL语句对大小写不敏感。SELECT = select。

1、SELECT语句

  • 语法:
SELECT 列名称 FROM 表名称
SELECT * FROM 表名称
  • 案例:
mysql> SELECT * FROM test.Persons;
+------+----------+-----------+----------------+----------+
| Id_P | LastName | FirstName | Address        | City     |
+------+----------+-----------+----------------+----------+
|    1 | Aaa      | John      | Oxford Street  | London   |
|    2 | Bush     | George    | Fifth Avenue   | New York |
|    3 | Carter   | Thomas    | Changan Street | Beijing  |
|    4 | Carter   | George    | xford Street   | London   |
+------+----------+-----------+----------------+----------+
4 rows in set (0.00 sec)

2、DISTINCT 语句

关键词 DISTINCT 用于返回唯一不同的值。

  • 语法:
SELECT DISTINCT 列名称 FROM 表名称
  • 案例:
mysql> select DISTINCT(LastName) from test.Persons;
+----------+
| LastName |
+----------+
| Aaa      |
| Bush     |
| Carter   |
+----------+
3 rows in set (0.00 sec)

3、WHERE 子句

如需有条件地从表中选取数据,可将 WHERE 子句添加到 SELECT 语句。

  • 语法
SELECT 列名称 FROM 表名称 WHERE 列 运算符 值

下面的运算符可在 WHERE 子句中使用:

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

注释:在某些版本的 SQL 中,操作符 <> 可以写为 !=。

  • 案例
mysql> SELECT * FROM Persons WHERE City='Beijing';
+------+----------+-----------+----------------+---------+
| Id_P | LastName | FirstName | Address        | City    |
+------+----------+-----------+----------------+---------+
|    3 | Carter   | Thomas    | Changan Street | Beijing |
+------+----------+-----------+----------------+---------+
1 row in set (0.00 sec)

4、引号的使用

SQL 使用单引号来环绕文本值(大部分数据库系统也接受双引号)。如果是数值,请不要使用引号。

  • 文本值:
这是正确的:
SELECT * FROM Persons WHERE FirstName='Bush'

这是错误的:
SELECT * FROM Persons WHERE FirstName=Bush
  • 数值:
这是正确的:
SELECT * FROM Persons WHERE Year>1965

这是错误的:
SELECT * FROM Persons WHERE Year>'1965'

5、AND 和 OR 运算符

AND 和 OR 可在 WHERE 子语句中把两个或多个条件结合起来。
如果第一个条件和第二个条件都成立,则 AND 运算符显示一条记录。
如果第一个条件和第二个条件中只要有一个成立,则 OR 运算符显示一条记录。

  • 语法
SELECT 列名称 FROM 表名称 WHERE (列 运算符 值) AND/OR (列 运算符 值)
  • AND案例
mysql> SELECT * FROM Persons WHERE FirstName='Thomas' AND LastName='Carter';
+------+----------+-----------+----------------+---------+
| Id_P | LastName | FirstName | Address        | City    |
+------+----------+-----------+----------------+---------+
|    3 | Carter   | Thomas    | Changan Street | Beijing |
+------+----------+-----------+----------------+---------+
1 row in set (0.00 sec)
  • OR案例
mysql> SELECT * FROM Persons WHERE firstname='Thomas' OR lastname='Carter';
+------+----------+-----------+----------------+---------+
| Id_P | LastName | FirstName | Address        | City    |
+------+----------+-----------+----------------+---------+
|    3 | Carter   | Thomas    | Changan Street | Beijing |
|    4 | Carter   | George    | xford Street   | London  |
+------+----------+-----------+----------------+---------+
2 rows in set (0.00 sec)
  • 组合使用案例
mysql> SELECT * FROM Persons 
    -> WHERE (FirstName='Thomas' OR FirstName='William')
    -> AND LastName='Carter';
+------+----------+-----------+----------------+---------+
| Id_P | LastName | FirstName | Address        | City    |
+------+----------+-----------+----------------+---------+
|    3 | Carter   | Thomas    | Changan Street | Beijing |
+------+----------+-----------+----------------+---------+
1 row in set (0.00 sec)

6、ORDER BY

  • 用于对结果集进行排序。

  • 用于根据指定的列对结果集进行排序。

  • 默认按照升序对记录进行排序。
    如果您希望按照降序对记录进行排序,可以使用 DESC 关键字。

  • 语法

SELECT 列名称 FROM 表名称 ORDER BY 列 DESC/ASC,列 DESC/ASC ...
  • Company降序 案例
+---------+-------------+
| Company | OrderNumber |
+---------+-------------+
| Xiaomi  | 7890        |
| Tencent | 6953        |
| LeEco   | 2876        |
| JD      | 3847        |
| IBM     | 3532        |
| Baidu   | 2356        |
| Apple   | 4698        |
| Ali     | 6534        |
+---------+-------------+
8 rows in set (0.00 sec)
  • Company降序、OrderNumber升序 案例
mysql> SELECT Company, OrderNumber FROM Orders ORDER BY Company DESC, OrderNumber ASC;
+---------+-------------+
| Company | OrderNumber |
+---------+-------------+
| Xiaomi  | 7890        |
| Tencent | 6953        |
| LeEco   | 2876        |
| JD      | 3847        |
| IBM     | 3532        |
| Baidu   | 2356        |
| Apple   | 4698        |
| Ali     | 6534        |
+---------+-------------+
8 rows in set (0.00 sec)

7、INSERT INTO 语句

用于向表格中插入新的行。

  • 语法
INSERT INTO 表名称 VALUES (值1, 值2,....)

我们也可以指定所要插入数据的列:

INSERT INTO table_name (列1, 列2,...) VALUES (值1, 值2,....)
  • 案例
INSERT INTO Persons VALUES (6,'Gates', 'Bill', 'Xuanwumen 10', 'Beijing');
INSERT INTO Persons (LastName, Address) VALUES ('Wilson', 'Champs-Elysees');

mysql> select * from Persons;
+------+----------+-----------+----------------+----------+
| Id_P | LastName | FirstName | Address        | City     |
+------+----------+-----------+----------------+----------+
|    1 | Aaa      | John      | Oxford Street  | London   |
|    2 | Bush     | George    | Fifth Avenue   | New York |
|    3 | Carter   | Thomas    | Changan Street | Beijing  |
|    4 | Carter   | George    | xford Street   | London   |
| NULL | Wilson   | NULL      | Champs-Elysees | NULL     |
|    6 | Gates    | Bill      | Xuanwumen 10   | Beijing  |
+------+----------+-----------+----------------+----------+
6 rows in set (0.01 sec)

8、UPDATE 语句

用于修改表中的数据。

  • 语法:
UPDATE 表名称 SET 列名称 = 新值 WHERE 列名称 = 某值
  • 案例
mysql> UPDATE Persons SET FirstName = 'Fred',Id_p = 9 
WHERE LastName = 'Wilson';

mysql> select * from Persons;
+------+----------+-----------+----------------+----------+
| Id_P | LastName | FirstName | Address        | City     |
+------+----------+-----------+----------------+----------+
|    1 | Aaa      | John      | Oxford Street  | London   |
|    2 | Bush     | George    | Fifth Avenue   | New York |
|    3 | Carter   | Thomas    | Changan Street | Beijing  |
|    4 | Carter   | George    | xford Street   | London   |
|    9 | Wilson   | Fred      | Champs-Elysees | NULL     |
|    6 | Gates    | Bill      | Xuanwumen 10   | Beijing  |
+------+----------+-----------+----------------+----------+
6 rows in set (0.00 sec)

9、DELETE 语句

用于删除表中的行。

  • 语法
DELETE FROM 表名称 WHERE 列名称 = 值

删除所有行,可以在不删除表的情况下删除所有的行。这意味着表的结构、属性和索引都是完整的:

DELETE FROM table_name
或者:
DELETE * FROM table_name

10、TOP 子句

用于规定要返回的记录的数目。
对于拥有数千条记录的大型表来说,TOP 子句是非常有用的。
注释:并非所有的数据库系统都支持 TOP 子句。
SQL Server 的语法:

SELECT TOP number|percent column_name(s)
FROM table_name

MySQL 语法:

SELECT column_name(s)
FROM table_name
LIMIT number

Oracle 语法:

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

11、LIKE 操作符

用于在 WHERE 子句中搜索列中的指定模式。
SQL LIKE 操作符语法:

SELECT column_name(s)
FROM table_name
WHERE column_name LIKE/NOT LIKE pattern
  • 案例
mysql> SELECT * FROM Persons
    -> WHERE City NOT LIKE '%lon%';
+------+----------+-----------+----------------+----------+
| Id_P | LastName | FirstName | Address        | City     |
+------+----------+-----------+----------------+----------+
|    2 | Bush     | George    | Fifth Avenue   | New York |
|    3 | Carter   | Thomas    | Changan Street | Beijing  |
|    6 | Gates    | Bill      | Xuanwumen 10   | Beijing  |
+------+----------+-----------+----------------+----------+
3 rows in set (0.01 sec)

mysql> SELECT * FROM Persons WHERE City LIKE '%lon%';
+------+----------+-----------+---------------+--------+
| Id_P | LastName | FirstName | Address       | City   |
+------+----------+-----------+---------------+--------+
|    1 | Aaa      | John      | Oxford Street | London |
|    4 | Carter   | George    | xford Street  | London |
+------+----------+-----------+---------------+--------+
2 rows in set (0.00 sec

12、SQL 通配符

在搜索数据库中的数据时,SQL 通配符可以替代一个或多个字符。
SQL 通配符必须与 LIKE 运算符一起使用。
在 SQL 中,可使用以下通配符:

通配符 描述
% 替代一个或多个字符
_ 仅替代一个字符
[charlist] 字符列中的任何单一字符
[^charlist]或者[!charlist] 不在字符列中的任何单一字符
  • 案例

MySql对于[]操作略显不同,需要使用REGEXP 替代LIKE。

mysql> SELECT * FROM Persons WHERE City REGEXP '[BO]';
+------+----------+-----------+----------------+----------+
| Id_P | LastName | FirstName | Address        | City     |
+------+----------+-----------+----------------+----------+
|    1 | Aaa      | John      | Oxford Street  | London   |
|    2 | Bush     | George    | Fifth Avenue   | New York |
|    3 | Carter   | Thomas    | Changan Street | Beijing  |
|    4 | Carter   | George    | xford Street   | London   |
|    6 | Gates    | Bill      | Xuanwumen 10   | Beijing  |
+------+----------+-----------+----------------+----------+
5 rows in set (0.00 sec)

mysql> SELECT * FROM Persons WHERE City REGEXP '^[BO]';
+------+----------+-----------+----------------+---------+
| Id_P | LastName | FirstName | Address        | City    |
+------+----------+-----------+----------------+---------+
|    3 | Carter   | Thomas    | Changan Street | Beijing |
|    6 | Gates    | Bill      | Xuanwumen 10   | Beijing |
+------+----------+-----------+----------------+---------+
2 rows in set (0.00 sec)

mysql> 

详情请参阅:MySql基础(一)

13、IN 操作符

IN 操作符允许我们在 WHERE 子句中规定多个值。

  • 语法
SELECT column_name(s)
FROM table_name
WHERE column_name IN (value1,value2,...)
  • 案例
mysql> SELECT * FROM Persons
    -> WHERE LastName IN ('Adams','Carter');
+------+----------+-----------+----------------+---------+
| Id_P | LastName | FirstName | Address        | City    |
+------+----------+-----------+----------------+---------+
|    3 | Carter   | Thomas    | Changan Street | Beijing |
|    4 | Carter   | George    | xford Street   | London  |
+------+----------+-----------+----------------+---------+
2 rows in set (0.01 sec)

14、BETWEEN

BETWEEN 操作符在 WHERE 子句中使用,作用是选取介于两个值之间的数据范围。

操作符 BETWEEN ... AND 会选取介于两个值之间的数据范围。这些值可以是数值、文本或者日期。

  • 语法:
SELECT column_name(s)
FROM table_name
WHERE column_name
BETWEEN value1 AND value2

如需使用上面的例子显示范围之外的人,请使用 NOT 操作符

不同的数据库对 BETWEEN...AND 操作符的处理方式是有差异的。某些数据库会列出介于 "value1" 和 "value2" 之间的人,但不包括 "value1" 和 "value2" ;某些数据库会列出介于 "value1" 和 "value2" 之间并包括 "value1" 和 "value2" 的人;而另一些数据库会列出介于 "value1" 和 "value2" 之间的人,包括 "value1" ,但不包括 "value2" 。
所以,请检查你的数据库是如何处理 BETWEEN....AND 操作符的!

  • 案例:
SELECT * FROM Persons
WHERE LastName
NOT BETWEEN 'Adams' AND 'Carter'

mysql> SELECT * FROM Persons
    -> WHERE LastName
    -> NOT BETWEEN 'Adams' AND 'Carter';
+------+----------+-----------+----------------+---------+
| Id_P | LastName | FirstName | Address        | City    |
+------+----------+-----------+----------------+---------+
|    1 | Aaa      | John      | Oxford Street  | London  |
|    9 | Wilson   | Fred      | Champs-Elysees | NULL    |
|    6 | Gates    | Bill      | Xuanwumen 10   | Beijing |
+------+----------+-----------+----------------+---------+
3 rows in set (0.00 sec)

15、SQL Alias(别名)

通过使用 SQL,可以为列名称和表名称指定别名(Alias)。让SQL语句更易于阅读。

  • Alias 语法
SELECT column_name(s)FROM table_nameAS alias_name
列的 SQL Alias 语法
SELECT column_name AS alias_nameFROM table_name
  • 案例:
mysql> SELECT p.LastName AS Family, p.FirstName AS Name
    -> FROM Persons as p;
+--------+--------+
| Family | Name   |
+--------+--------+
| Aaa    | John   |
| Bush   | George |
| Carter | Thomas |
| Carter | George |
| Wilson | Fred   |
| Gates  | Bill   |
+--------+--------+
6 rows in set (0.00 sec)
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 218,607评论 6 507
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 93,239评论 3 395
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 164,960评论 0 355
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,750评论 1 294
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,764评论 6 392
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,604评论 1 305
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,347评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,253评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,702评论 1 315
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,893评论 3 336
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 40,015评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,734评论 5 346
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,352评论 3 330
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,934评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,052评论 1 270
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,216评论 3 371
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,969评论 2 355

推荐阅读更多精彩内容

  • 什么是数据库? 数据库是存储数据的集合的单独的应用程序。每个数据库具有一个或多个不同的API,用于创建,访问,管理...
    chen_000阅读 4,035评论 0 19
  • 表 存储在表中的数据是同一种类型的数据或清单。 数据库中的表有为一个名字来标识自己。 表具有一些特性,这些特性定义...
    蛐蛐囍阅读 1,314评论 0 7
  • SQL 是用于访问和处理数据库的标准的计算机语言,使用 SQL 访问和处理数据系统中的数据,这类数据库包括:Ora...
    子非鱼_t_阅读 825评论 0 3
  • 经典MSSQL语句大全和常用SQL语句命令的作用 下列语句部分是Mssql语句,不可以在access中使用。 SQ...
    Keropok阅读 2,401评论 0 30
  • 最近因为工作的关系,读书计划暂停,感觉整个人都要枯竭了,好在看了些好电影和剧,闲聊几句还是可以的。 电影看了近期很...
    臭兔子的小树洞阅读 143评论 1 0