使用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、使用通配符( * )有一个优点:由于不需要明确指出列明,所以能检索出名字未知的列。
语法:
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没多大的用处,因为升序是默认的