MySQL之数据查询语句(一)

MySQL SELECT 基本语法

MySQL 从数据表中查询数据的基本语句为 SELECT 语句,基本格式如下:

SELECT [DISTINCT] *丨字段名1,字段名2,字段名3,…
FROM 表1,表2
[WHERE 条件表达式1]
[GROUP BY 字段名 [HAVING 条件表达式2]]
[ORDER BY 字段名[ASC丨DESC]
[LIMIT [偏移量,] 记录数];   or  [LIMIT 记录数 [OFFSET 偏移量] ];

  • [DISTINCT]是可选参数,用于剔除查询结果中重复的数据。
  • *丨字段名1,字段名2,字段名3,…包含星号通配符的字段列表,表示查询的字段,其中字段列至少包含一个字段名称,如果要查询多个字段,多个字段之间要用逗号隔开,最后一个字段后不要加逗号。
  • FROM 表1,表2表 1 和表 2 表示查询数据的来源,可以是单个或多个。
  • WHERE 条件表达式1可选项,如果选择该项,将限定查询行必须满足的查询条件。
  • [GROUP BY 字段名 [HAVING 条件表达式2]]GROUP BY 字段名如何显示查询出来的数据,并按照指定的字段分组,HAVING也是可选参数,用于对分组后的结果进行过滤。
  • [ORDER BY 字段名[ASC丨DESC]该子句告诉 MySQL 按什么样的顺序显示查询出来的数据,可以进行的排序有升序(ASC)和降序(DESC)。若不指定参数,默认为升序排列。
  • [LIMIT [OFFSET] 记录数]:LIMIT是可选参数用于限制查询结果的数量。 LIMIT后面可以跟两个参数,第一个参数OFFSET表示偏移量,如果偏移量为0则从查询结果的第一条记录开始,偏移量为1则从查询结果中的第二条记录开始…以此类推。OFFSET为可选值,如果不指定其默认值为0。第二个参数记录数表示返回查询记录 的条数。
    语句1:select * from student limit 9,4
    语句2:slect * from student limit 4 offset 9
    // 语句1和2均返回表student的第10、11、12、13行
    //语句2中的4表示返回4行,9表示从表的第十行开始

在使用条件查询前,我们需要测试数据:

CREATE TABLE student (
	sid CHAR(6),
	sname VARCHAR(50),
	age INT,
	gender VARCHAR(50) DEFAULT 'male'
);
INSERT INTO student (sid,sname,age,gender) VALUES ('S_1001', 'lili', 14, 'male');
INSERT INTO student (sid,sname,age,gender) VALUES ('S_1002', 'wang', 15, 'female');
INSERT INTO student (sid,sname,age,gender) VALUES ('S_1003', 'tywd', 16, 'male');
INSERT INTO student (sid,sname,age,gender) VALUES ('S_1004', 'hfgs', 17, 'female');
INSERT INTO student (sid,sname,age,gender) VALUES ('S_1005', 'qwer', 18, 'male');
INSERT INTO student (sid,sname,age,gender) VALUES ('S_1006', 'zxsd', 19, 'female');
INSERT INTO student (sid,sname,age,gender) VALUES ('S_1007', 'hjop', 16, 'male');
INSERT INTO student (sid,sname,age,gender) VALUES ('S_1008', 'tyop', 15, 'female');
INSERT INTO student (sid,sname,age,gender) VALUES ('S_1009', 'nhmk', 13, 'male');
INSERT INTO student (sid,sname,age,gender) VALUES ('S_1010', 'xdfv', 17, 'female');
INSERT INTO student (sid,sname,age,gender) VALUES ('S_1012', 'lili', 14, 'male');
INSERT INTO student (sid,sname,age,gender) VALUES ('S_1013', 'wang', 15, 'female');

  • 使用IN关键字进行条件查询
SELECT *丨字段名1,字段名2,…
FROM 表名
WHERE 字段名 [NOT] IN (元素1,元素2,...);

三个例子

mysql> SELECT sid,sname FROM student WHERE age IN (14,17);
+--------+-------+
| sid    | sname |
+--------+-------+
| S_1001 | lili  |
| S_1004 | hfgs  |
| S_1010 | xdfv  |
| S_1012 | lili  |
+--------+-------+
4 rows in set (0.09 sec)

mysql> SELECT sid,sname FROM student WHERE age NOT IN (14,17);
+--------+-------+
| sid    | sname |
+--------+-------+
| S_1002 | wang  |
| S_1003 | tywd  |
| S_1005 | qwer  |
| S_1006 | zxsd  |
| S_1007 | hjop  |
| S_1008 | tyop  |
| S_1009 | nhmk  |
| S_1013 | wang  |
+--------+-------+
8 rows in set (0.05 sec)

mysql> SELECT * FROM student WHERE age NOT IN (14,17);
+--------+-------+-----+--------+
| sid    | sname | age | gender |
+--------+-------+-----+--------+
| S_1002 | wang  |  15 | female |
| S_1003 | tywd  |  16 | male   |
| S_1005 | qwer  |  18 | male   |
| S_1006 | zxsd  |  19 | female |
| S_1007 | hjop  |  16 | male   |
| S_1008 | tyop  |  15 | female |
| S_1009 | nhmk  |  13 | male   |
| S_1013 | wang  |  15 | female |
+--------+-------+-----+--------+
8 rows in set (0.05 sec)
  • 使用BETWEEN AND关键字进行查询
SELECT *丨字段名1,字段名2,…
FROM 表名
WHERE 字段名 [NOT] BETWEEN 值1 AND 值2;
  • 使用空值查询
SELECT *丨字段名1,字段名2,…
FROM 表名
WHERE 字段名 IS [NOT] NULL;
  • 使用DISTINCT关键字进行查询
    出于对数据的分析需要过滤掉查询记录中重复的值。在SELECT语句中可使用DISTINCT关键字来实现该功能。
SELECT DISTINCT 字段名 FROM 表名;
  • 使用AND关键字进行条件查询
SELECT *丨字段名1,字段名2,…
FROM 表名
WHERE 条件表达式1 AND 条件表达式2 … AND 条件表达式n;
  • 使用OR关键字进行条件查询
SELECT *丨字段名1,字段名2,…
FROM 表名
WHERE 条件表达式1 OR 条件表达式2 … OR 条件表达式n;
  • 使用LIKE关键字进行字符串条件查询
SELECT *丨字段名1,字段名2,…
FROM 表名
WHERE 字段名 [NOT] LIKE '匹配字符串'

含有%通配的字符串
查询学生姓名以wan开始的记录:SELECT sname,age,gender FROM student WHERE sname LIKE 'wan%';
查询学生姓名以w开始且以g结尾的记录:SELECT sname,age,gender FROM student WHERE sname LIKE 'w%g';
查询学生姓名中包含n的记录:SELECT sname,age,gender FROM student WHERE sname LIKE '%n%';
查询学生姓名中不包含a的记录:SELECT sname,age,gender FROM student WHERE sname NOT LIKE '%a%';
含有_通配的字符串
下划线通配符只匹配单个字符,如果要匹配多个字符,需要连续使用多个下划线通配符。例如,字符串“ab_”匹配以字符串“ab”开始长度为3的字符串,如abc、abp等等;字符串“a__d”匹配在字符“a”和“d”之间包含两个字符的字符串,如"abcd"、"atud"等等。
查询学生姓名以wan开头且长度为4的记录:SELECT sname,age,gender FROM student WHERE sname LIKE 'wan_';
查询学生姓名以er结尾且长度为4的记录:SELECT sname,age,gender FROM student WHERE sname LIKE '__er';

  • 使用ORDER BY 对查询结果进行排序
    查出来的数据是无序的并不是我们需要的,我们需要对他们进行排序。
SELECT 字段名1,字段名2,…
FROM 表名
ORDER BY 字段名1 [ASC 丨 DESC],字段名2 [ASC | DESC];

查询所有学生并按照年纪大小升序排列:SELECT * FROM student ORDER BY age ASC;
查询所有学生先按照年纪大小升序排列再按照姓名降序排列:SELECT * FROM student ORDER BY age ASC,sname DESC;
两个限制条件的话,是从左到有一次满足

  • 使用LIMIT限制查询数量
SELECT 字段名1,字段名2,…
FROM 表名
LIMIT [偏移量,] 记录数];   or  [LIMIT 记录数 [OFFSET 偏移量] ;

语句1:select * from student limit 9,4
语句2:slect * from student limit 4 offset 9
// 语句1和2均返回表student的第10、11、12、13行
//语句2中的4表示返回4行,9表示从表的第十行开始
查询学生表中的前5位同学:SELECT * FROM student LIMIT 5;
查询学生表所有学生,并按照age升序排序,再按照sid升序排序,显示从第五条到第九条记录:

mysql> SELECT * FROM student ORDER BY age ASC, sid ASC LIMIT 4,5;
+--------+-------+-----+--------+
| sid    | sname | age | gender |
+--------+-------+-----+--------+
| S_1001 | lili  |  14 | male   |
| S_1001 | lili  |  14 | male   |
| S_1001 | lili  |  14 | male   |
| S_1001 | lili  |  14 | male   |
| S_1012 | lili  |  14 | male   |
+--------+-------+-----+--------+
5 rows in set (0.05 sec)
  • 设置别名
    <表名> [AS] <别名>
    <表名>:数据中存储的数据表的名称。
    <别名>:查询时指定的表的新名称。
    AS:关键字为可选参数。
    <列名> [AS] <列别名>
    <列名>:为表中字段定义的名称。
    <列别名>:字段新的名称。
    AS:关键字为可选参数。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值