当前位置:Gxlcms > 数据库问题 > 决胜九月:mysql面试必会基础(一)

决胜九月:mysql面试必会基础(一)

时间:2021-07-01 10:21:17 帮助过:2人阅读

SELECT * FROM tablename limit 5;结果不能超过5条

SELECT * FROM tablename limit 5,10;将返回从行5开始的10行。注意行号从0开始记数

(4)完全限定的表名

SELECT tablename.columnname FROM databasename.tablename

当多表联合查询时经常会用到这种方式,下面将具体介绍

(5)使用order by 可以对数据进行排序,

SELECT * FROM tablename ORDER BY columnname;对数据按照columnname“升序”排列

SELECT * FROM tablename ORDER BY columnname DESC;对数据按照columnname“降序”排列

按照多列排序用逗号分割

SELECT * FROM tablename ORDER BY columnname1 DESC,columnname2;

对数据按照columnname1“降序”排列,若columnname1相同则按照columnname2升序排列

(6)过滤条件where

where子句操作符
操作符 说明

<>      !=
<
<=
>
>=
BETWEEN a AND b
等于
不等于
小于
小于等于
大于
大于等于
在指定的两个值之间

空值检查:IS NULL(NULL 无值,和0,空字符串不同)

SELECT * FROM tablename WHERE columnname IS NULL

(7)组合where子句 or ,and,in,not 

or 和 and与逻辑或和与对应。但是这里要考虑到计算次序的问题,SQL像很多语言一样先处理AND再处理OR

例如:SELECT * FROM tablename WHERE column1 = 10 or column1 = 11 and colum2 > 0的默认执行顺序是

SELECT * FROM tablename WHERE column1 = 10 or column1 = 11 and colum2 > 0

如果想让两个条件先或,则要用括号包起来SELECT * FROM tablename WHEREcolumn1 = 10 orcolumn1 = 11and colum2 > 0

in 规定取值必须在某个范围内 SELECT * FROM tablename WHERE column IN (1,2,3);

NOT是WHERE子句中用来否定后跟条件的关键字。mysql支持使用NOT对IN,BETWEEN,EXISTS子句取反。

(8)LIKE操作符

SELECT * FROM tablename WHERE colunm LIKE “%test_”

其中 % _ 都是通配符,%匹配任意字符任意多次 _匹配任意字符一次

(9)REGEXP

使用正则表达式进行匹配。

MySQL用WHERE子句对正则表达式提供了初步的支持,允许你指定用正则表达式过滤SELECT检索出的数据

MySQL仅支持多数正则表达式实现的一个很小的子集。

基本字符匹配

技术分享 技术分享
SELECT prod_name
FROM products
WHERE prod_name REGEXP 1000
ORDER BY prod_name;

------返回------
+------------------------+
|    prod_name    |
+------------------------+
|  JetPack 1000  |
+------------------------+
技术分享

.  表示匹配任意一个字符。

技术分享 技术分享
SELECT prod_name
FROM products
WHERE prod_name REGEXP .000
ORDER BY prod_name;

------------返回-----------

+-------------------------+
|     prod_name    |
+-------------------------+
|   JetPack 1000  |
|   JetPack 2000  |
+-------------------------+
技术分享

MySQL中的正则表达式匹配不区分大小写。

为区分大小写,可使用BINARY关键字。

如:WHERE prod_name REGEXP BINARY ‘JetPack .000‘

进行OR匹配

为搜索两个串之一(或者这个串,或者为另一个串),使用 | 。

| 作为OR操作符,表示匹配其中之一。可给出两个以上的OR条件。

技术分享 技术分享
SELECT prod_name
FROM products
WHERE prod_name REGEXP 1000 | 2000
ORDER BY prod_name;

------------返回------------

+----------------------+
|  prod_name   |
+----------------------+
| JetPack 1000 |
| JetPack 2000 |
+----------------------+
技术分享

 

[ ] 匹配任何单一字符。

[123]定义一组字符,意思是匹配1或2或3.

[ ]是另外一种形式的OR语句,[123] Ton  就是  [1 | 2 | 3] Ton 的缩写。

^ 否定一个字符集合,将匹配除指定字符外的任何东西。[^123]将匹配除这些字符外的任何东西。

技术分享 技术分享
SELECT prod_name
FROM products
WHERE prod_name REGEXP [123] Ton
ORDER BY prod_name;

-------------返回------------

+--------------------+
| prod_name   |
+--------------------+
| 1 ton anvil    |
| 2 ton anvil    |
+--------------------+
技术分享

 

匹配范围

[0123456789] 或 [0-9] 将匹配数字0到9

[a-z] 匹配任意字母符号

技术分享 技术分享
SELECT prod_name
FROM products
WHERE prod_name REGEXP [1-5] Ton
ORDER BY prod_name;

----------返回-----------

+-------------------+
|  prod_name |
+-------------------+
|  .5 ton anvil  |
|  1 ton anvil   |
|  2 ton anvil   |
+-------------------+
技术分享

 

匹配特殊字符

\\  为前导。即转义.正则表达式内具有特殊意义的所有字符都必须以这种方式转义。

\\-  表示查找 -

\\.  表示查找 .

技术分享 技术分享
SELECT prod_name
FROM vendors
WHERE vend_name REGEXP \\.
ORDER BY vend_name;

-------------返回-------------

+----------------------+
|  vend_name   |
+----------------------+
|  Furball Inc.    |
+----------------------+
技术分享

 

\\  也用来引用元字符(具有特殊意义的字符)

\\f    换页
\\n    换行
\\r    回车
\\t    制表
\\v    纵向制表

 

匹配字符类

技术分享 技术分享
[:a;num:]    任意字母和数字(同 [a-zA-Z0-9])
[:alpha:]     任意字符(同 [a-zA-Z])
[:blank:]     空格和制表(同 [\\t])
[:cntrl:]        ASCII控制字符(ASCII 0到31和127)
[:digit:]       任意数字(同[0-9])
[:graph:]    与["print:] 相同,但不包括空格
[:lower:]      任意小写字线(同 [a-z])
[:print:]        任意可打印字符
[:punct:]      既不在 [:alnum:] 又不在 [:cntrl:] 中的任意字符
[space:]       包括空格在内的任意空白字符(同 [\\f\\n\\t\\r\\v])
[:upper:]     任意大小字母(同 [A-Z])
[:xdigit:]      任意十六进制数字(同 [a-fA-F0-9])
技术分享

 

匹配多个实例

技术分享 技术分享
元字符              说明
*                       0个或多个匹配
+                      1个或多个匹配(等于 {1, })
?                      0个或1个匹配(等于 {0, 1})
{n}                    指定数目的匹配
{n, }                  不少于指定数目的匹配
{n ,m}                匹配数目的范围(m不超过255)
技术分享

 

以下例子:s后的?使s可选,因为?匹配它前面的任何字符的0次或1次出现。

技术分享 技术分享
SELECT prod_name
FROM products
WHERE prod_name REGEXP \\([0-9] sticks?\\)
ORDER BY prod_name;

------------返回------------

+-----------------------+
|  prod_name    |
+-----------------------+
|  TNT (1 stick)   |
|  TNT (5 sticks) |
+-----------------------+
技术分享

 

匹配连在一直的4位数字:WHERE prod_name REGEXP ‘[[:digit:]]{4}‘

 

定位符

^         文本的开始
$        文本的末尾
[[:<:]]  词的开始
[[:>:]]  词的结尾

 

技术分享 技术分享
SELECT prod_name
FROM products
WHERE prod_name REGEXP ^[0-9\\.]
ORDER BY prod_name;

-----------返回----------

+---------------------+
|   prod_name  |
+---------------------+
|  .5 ton anvil   |
|  1 ton anvil    |
|  2 ton anvil    |
+---------------------+
技术分享

 

^的双重用途:在集合中(用[ ]定义),用它来否定该集合。否则,用来指串的开始和。

LIKE 匹配整个串,而REGEXP匹配子串。

    简单的正则表达式测试  可以在不使用数据库的情况下用SELECT来测试正则表达式。

    REGEXP检查总是返回0(没有匹配)或1(匹配),可以用带文字串的REGEXP来测

    试表达式,并试验它们。相应的语法如下:

        SELECT ‘hello‘ REGEXP ‘[0-9]‘

    这个例子返回0(因为文本hello中没有数字)。


(10)拼接字段,别名,执行算术计算

SELECT Concat(column,‘(‘column2,‘)‘) FROM tablename 

将返回数据格式未 colunm(column2)

AS 关键字用来给列或者表定义别名。SELECT Concat(column,‘(‘column2,‘)‘) AS newcolumn FROM tablename 

存储在表中的数据一般不是应用程序所需要的格式。我们需要直接从数据库中检索出转换、计算或格式化的数据。而不只是检索出数据,然后再到应用程序或报告程序中区格式化。

这就发挥了计算字段的作用了。与前面的字段不同,计算字段并不实际存在于数据库中。计算字段是运行时在SELECT 语句中创建的。

        需要注意的是,只有SELECT语句知道那些列是实际列,哪些列不是,客户机的角度来看,计算字段和其他字段是一样的。

    拼接字段

    拼接:将值联结到一起构成单个值。

        生成供应商  columnOnecolumnTwo  的格式

        SELECT Concat(columnOne, ‘(‘ , columnTwo, ‘)‘) FROM table ORDER BY columnOne;

    使用别名

         别名使用AS关键字赋予

    执行算术运算

        另一常见的用途就是对检索出来的数据进行算术运算。

        例如:检索出column_id 2005columnOne乘以columnTwo的值

        SELECT column_id, columnOne, columnTwo, columnOne*columnTwo AS column_price FROM table WHEREcolumn_id = 2005

    操作符   + - *  /

        SELECT 3*2;将返回6

        SELECT Now(); 返回当前的日期和时间


2.函数

(1)常用文本函数

   SQL实现了一下类型的函数

        1 用于处理文本串,如删除、填充、装换大小写

        2 用于数据上进行的算术操作,如返回绝对值,进行代数运算

        3用于处理日期和时间值并从这些值中提取特定的成分,如返回两个日期差,检查日期有效性

        4 返回DBMS正使用的特殊信息 ,如用户登录信息,检查版本细节信息

    文本处理函数

        Upper()  将文本转换为大写

        SELECT vend_name, Upper(vend_name) AS vend_name_upcase FROM vendors ORDER BYvend_name;

    常用的文本处理函数

        Left()             返回串左边的字符

        Length()         返回串的长度

        Locate()         找出串的一个子串

        Lower()         将串转换为小写

人气教程排行