1. 连接登录数据库

2. 选择数据库

use …
并不返回任何结果

注:必须先使用use打开数据库,才能读取其中的数据。

3. 了解数据库和表

SHOW DATABASES; //返回可用数据库的一个列表

SHOW TABLES; //返回当前选择的数据库内可用表的列表

SHOW COLUMNS FROM customers; //显示表列

SHOW GRANTS //用来显示

或 DESCRIBE

HELP SHOW

4. 检索数据

4.1 检索数据

SELECET 检索表数据,必须至少给出两条信息——想选择什么,以及从什么地方选择

DISTINCT 关键字 只返回不同(唯一)的值,使用该关键字,必须放在列名的前面

SELECT DISTINCT vend_id FROM products;

注:DISTINCT 应用于所有列而不是前置它的列

限制结果 LIMIT
带一个值的LIMIT 总是从第一行开始,给出的数为返回的行数。
带两个值的LIMIT可以指定从行号为第一个值的位置开始

**
注:行0 检索出来的行0 为第一行,LIMIT 1,1 ; 将检索出第二行而不是第一行

使用完全限定的表名
SELECT products.prod_name FROM products;

4.2 排序检索数据

排序数据
ORDER BY
**
SELECT prod_name FROM products ORDER BY prod_price,prod_name;

注:在多个列排序时,仅在多个行具有相同的prod_price 值时才对产品按prod_name排序
若prod_price 列中所有的值是唯一的,则不会按prod_name排序

指定排序方向

DEC 降序
ASC 升序


5. 过滤数据

5.1 基本过滤

使用WHERE子句
**
SELECT prod_name,prod_price FROM products WHERE prod_price = 2.5;

注:在同时使用ORDER BY 和 WHERE 子句时,应该让ORDER BY 位于 WHERE 之后,否则会产生错误

何时使用引号:单引号用来限定字符串,数值比较则不需要引号

  • 检查单个值 = > < <= >=
  • 不匹配检查: <> !=
  • 范围值检查: BETWEEN AND
  • 空值检查 NULL 无值 (no value)
    • 在创建表时,表设计人员可以指定其中的列是否可以不包含值,一个列不包含值时,称其为包含空值NULL
    • 它与字段包含0 , 空字符串 或 仅仅包含空格不同!

SELECT prod_name FROM products WHERE prod_price IS NULL;

5.2 数据过滤

  • AND OR

计算次序:
SQL中,WHERE 可包含任意数目的AND 和 OR 操作,允许两者进行复杂和高级的过滤
但优先处理AND ,可使用括号。

  • IN操作符

用来指定条件范围,范围中的每个条件都可以进行匹配。IN取合法值的由逗号分隔的清单,全部括在圆括号中。
(可以完成跟OR 相同的功能,但效率比OR高)
WHERE vend_id IN (1002,1003)

  • NOT操作符

否定它之后所跟的任何条件

5.3 用通配符进行过滤

通配符:用来匹配值的一部分的特殊字符

搜索模式:由字面值、统配符或两者组合构成的搜索条件

  • LIKE操作符

注:为在搜索子句中使用通配符,必须使用LIKE操作符,LIKE指示Mysql,后跟的搜索模式利用通配符匹配而不是直接相等匹配进行比较。

  • 百分号(%)通配符

在搜索串中,%表示任何字符串出现的任意次数

LIKE ‘jet%’
搜索模式 ‘jet%’ ,在执行这条子句时,将检索任意以jet起头的词,%意思为接受jet之后任意字符,不管它有多少字符

LIKE ‘%anvil%’
表示匹配任何位置包含文本anvil的值,不论它之前或之后出现什么字符

LIKE ‘s%e’
通配符也可以用于搜索模式的中间,找出以s起头以e结尾的所有产品

除了一个或多个字符外,%还能匹配0个字符,%代表搜索模式中给定位置的0个、1个或多个字符

注意NULL:虽然似乎%通配符可以匹配任何东西,但有一个例外,即NULL,即使是**WHRE prod_name LIKE ‘%’**也不能匹配用值NULL作为产品名的行

  • 下划线(_)通配符

用途跟%一样,但是只能匹配单个字符

注:把通配符置于搜索模式的开始处,搜索起来是最慢的
**

6. 用正则表达式来进行搜索

  • 正则表达式

用来匹配文本的特殊的串(字符集合)

REGEXP 在列值内进行匹配,如果被匹配的文本在列值中出现,REGEXP将会找到它,相应的行会被返回
LIKE 在列值内进行匹配,如果被匹配的文本在列值中出现,LIKE将不会找到它,相应的行不会被返回

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

  • 进行OR匹配

WHERE prode_name REGEXP ‘1000|2000’

  • 匹配几个字符之一


WHERE prode_name REGEXP ‘[123]ton’
[123] 定义一组字符,它的意思是匹配1或2或3,其实是另一种形式的OR语句
字符集合也可以被否定**,[^123] 可以匹配除这些字符外的任何东西

  • 匹配范围

[1-9] [a-z]

  • 匹配特殊的字符

必须用\为前导,\-表示查找-,\.表示查找. (转义)

  • 匹配字符类

[:alnum:] 任意字母和数字 同 [a-zA-Z0-9]

  • 匹配多个实例

重复元字符

  • 定位元字符

^ $ [[:<:]] (词的开始) [[:>:]] (词的结尾)
**

**