MySQL:检索数据

 

检索数据:

使用SELECT语句从表中检索一个或多个数据列,在使用该语句时必须明确两条信息:
1、想检索什么
2、从什么地方选择


检索单个列

语法:

SELECT 列名 FROM 表名;

例1:

/*
在系统命令行中执行
*/

mysql> use demo;
Database changed
mysql> SELECT userId FROM roleinfo;

+---------------------+
| userId              |
+---------------------+
| 5529676068164933051 |
| 5529676068171749497 |
| 5529676068235679792 |

备注:使用数据库检索时,如果没有明确排序查询结果(如上例),则返回的结果也是无序的。

检索多个列

语法:

SELECT X,Y,Z FROM A;
参数
X,Y,Z:需要检索的列,列名之间必须用逗号分隔
A:从哪个表中检索,

例2:

mysql> SELECT userId,level,career,sex FROM roleinfo;
+---------------------+-------+--------+-----+
| userId              | level | career | sex |
+---------------------+-------+--------+-----+
| 5529676068164933051 |   107 |      2 |   1 |
| 5529676068235679792 |   106 |      3 |   0 |
| 5529676068171749497 |   101 |      2 |   1 |

检索所有列:

语法:

SELECT * FROM A;

参数
*:为通配符
A:从哪个表中检索

例3:

mysql> select * from roleinfo;
输出结果:对应表中的多有列

备注:
1、一般,除非你确定需要表中的所有列,否则最好不要使用通配符( * )。否则表中数据过多时不好区分且会降低检索和应用程序的性能
2、使用通配符( * )有一个优点:由于不需要明确指出列明,所以能检索出名字未知的列。
 

扫描二维码关注公众号,回复: 5400655 查看本文章

检索不同的行

语法:

SELECT DISTINCT X  FROM A;
参数
DISTINCT:SQL关键字,表示只返回不同的值
X:需要检索的列
A:从哪个表中检索,

例4:

mysql> SELECT DISTINCT sex  FROM roleinfo;
+-----+
| sex |
+-----+
|   1 |
|   0 |
+-----+

限制结果

语法:

SELECT  X  FROM A LIMIT num;
参数
LIMIT:SQL子句,表示输出结果不多于num行(按库里的顺序)
num:输出结果的个数
X:需要检索的列
A:从哪个表中检索

例4:

mysql> SELECT level FROM roleinfo LIMIT 2;
+-------+
| level |
+-------+
|   107 |
|   106 |
+-------+

例4_1:

mysql> SELECT level FROM roleinfo LIMIT 2,3;
+-------+
| level |
+-------+
|   101 |
+-------+

注:
1、可指定要检索的开始行和结束行:第一个数为开始行,但不包括该行,第二个数为结束行,包括该行(不包括开始的行,包含结束行)
2、带有一个值得LIMIT总是从第一行开始的;指定要检索的行数大于最大行数时,则返回全部行
 

使用完全限定的表名

语法:

SELECT 表名.列名  FROM 数据库名.表名;

例5:

SELECT roleinfo.sex  FROM demo.roleinfo;

+-----+
| sex |
+-----+
|   1 |
|   0 |
|   1 |
+-----+

注:
在DBMS上使用这种写法的SQL语句时,可以不选中需要执行的表名(和数据库),不过这种写法太繁琐了。
 

排序检索数据

排序数据

语法:

SELECT 列名 FROM 表名 ORDER BY 列名;

返回值:指示MySQL对指定列以字母顺序排序数据(以BY后面列名的列为基准)

例6: 

mysql> SELECT platformName FROM roleinfo ORDER BY platformName;
+---------------+
| platformName  |
+---------------+
| ainjigame_app |
| cinjigame     |
| xinjigame_app |
+---------------+

按多个列排序

语法:

SELECT 列名1,列名2,列名3 FROM 表名 ORDER BY 列名1,列名2;

例6:

mysql> SELECT platformName,channelName ,career,camp FROM roleinfo ORDER BY platformName,career;
+---------------+---------------+--------+------+
| platformName  | channelName   | career | camp |
+---------------+---------------+--------+------+
| ainjigame_app | ginjigame_app |      2 |    2 |
| cinjigame     | binjigame     |      3 |    1 |
| xinjigame_app | xinjigame_app |      2 |    2 |
+---------------+---------------+--------+------+

注:
上面例子中BY后面有两个参数,意思为:如果第一个参数(platformName)多个行具有相同的值时才按第二个参数(career)排序如果第一个参数的值都是唯一的,则就不会按第二个参数排序了。
 

指定排序方向:

语法:

SELECT 列名1,列名2 FROM 表名 ORDER BY 列名1或列名2 DESC;

DESC:SQL关键字,指示降序排序,ASC升序排序是默认排序方向

例7:

mysql> SELECT platformName,channelName ,LEVEL,camp FROM roleinfo ORDER BY LEVEL DESC,camp;
+---------------+---------------+-------+------+
| platformName  | channelName   | LEVEL | camp |
+---------------+---------------+-------+------+
| xinjigame_app | xinjigame_app |   107 |    2 |
| cinjigame     | binjigame     |   106 |    1 |
| ainjigame_app | ginjigame_app |   101 |    2 |
+---------------+---------------+-------+------+

注:
上面语句的意思为:以level列的降序为准排序输出指定列(只对DESC前面的第一个参数生效)

例8:组合使用_找出最大等级

mysql> SELECT level FROM roleinfo ORDER BY level DESC LIMIT 1;
+-------+
| level |
+-------+
|   107 |
+-------+

注:
再给出ORDER BY子句时,应该保证它位于FROM子句之后。如果使用LIMIT,它必须位于ORDER BY之后。使用子句的次序不对将产生错误消息。
 

补充:
1、多条SQL语句必须以分号";"分隔。MYSQL如多数DBMS一样,不需要再单条SQL语句后面加分号(除特殊的外),当然如果愿意可以总是加上分号。如果用的是Mysql命令行,则必须加上分号来结束SQL语句。

2、SQL语句是不区分大小写的。通常大多数人喜欢对SQL关键字使用大写,而对所有列和表明使用小写,这样可以使代码更容易阅读和调试

3、在处理SQL语句时,其中所有的空格都会被忽略,SQL语句可以在一行上给出,也可以分成许多行。

4、在DBMS上执行SQL语句时,要选中需要执行语句的数据库、表

5、子句:SQL语句由子句构成,有些子句是必须的,而有的是可选的。一个子句通常由一个关键字和所提供的数据组成。子句的例子有SELECT语句中的FROM子句

6、DESC关键字只应用到直接位于其前面的列名。如在例7中只对"LEVEL"列指定EDSC,对"camp"列不指定,因此"LEVEL"列按降序排序而"camp"列不变

7、与DESC相反的关键字是ASC,不过ASC没多大的用处,因为升序是默认的

猜你喜欢

转载自blog.csdn.net/qq_39314932/article/details/84842982