[MySQL 第一弹] 检索

SQL(Structured Query Language)结构化查询语言
主键(Primary Key): 一列或一组列,其值能够唯一区分表中的每个行.

  主键的好习惯: 
      不更新主键列中的值;
      补充用主键列中的值
      不在主键列中使用可能会更改的值

数据库和表:

关键字:

  1. SHOW

    	USE crashcourse;
    	SHOW DATABASES;
    	SHOW TABLES;
    	SHOW COLUMNS FROM customers;
    		等于 DESCRIBE customers;
    		DESCRIBE: 作为SHOW COLUMNS FROM的快捷方式
    	SHOW STATUS;
    
  2. SELECT 检索数据:

    搭配关键字: DISTINCT LIMIT

    SELECT prod_id, prod_name, prod_price FROM products;  列名之间用逗号:
    SELECT * FROM products;  检索所有列
    DISTINCT关键字: 返回唯一的值 用于检索不同的行
    	SELECT DISTINCT vend_id FROM products;
    LIMIT: 限制匹配的行
    	SELECT prod_name FROM products LIMIT 5;
    	SELECT prod_name FROM products LIMIT 5,5; 从第5行开始的5行
    使用完全限定的表名:
    	
    
  3. 排序检索数据
    ORDER BY字句
    默认升序(ASC), DESC降序.

    SELECT prod_name FROM products ORDER BY prod_name;
    
    SELECT prod_name, prod_price, prod_id 
     --> FROM products ORDER BY prod_price, prod_name;  多列排序
     
    DESC降序
    SELECT prod_name, prod_price, prod_id 
     -->FROM products ORDER BY prod_price DESC,  prod_name;  降序
    
    搭配LIMIT(注意字句的次序):
     SELECT prod_price FROM products ORDER BY prod_price DESC LIMIT 1; 
    
  4. 过滤数据
    SELECT语句中的WHERE子句
    WHERE 字句操作符(= , != , < , <=, >, >= , BETWEEN, <>不等于)
    匹配时候默认不区分大小写

    SELECT prod_name, prod_price 
     --> FROM products WHERE prod_price = 2.50
    
    结合ORDER BY 字句,需要在WHERE之后,不然会报错
    SELECT id, name FROM security_groups
     -->  WHERE name = 'default' ORDER BY id;
    
    操作符示例:
     	SELECT prod_name, prod_price, prod_id 
    	 -->FROM products WHERE prod_price < 10;
      
       列出不是由 供应商1003制作的所有产品
      	SELECT prod_name, prod_price, vind_id
    	 -->FROM products WHERE vind_id <> 1003;
    	 SELECT prod_name, prod_price, vind_id
    	 -->FROM products WHERE vind_id != 1003;
    
    	开始值和结束值之间用AND连接
    	SELECT prod_name, prod_price, prod_id 
    	 -->FROM products WHERE prod_price BETWEEN 5 AND 10;
    
    	空值检查:
    	SELECT prod_name FROM products WHERE prod_price IS NULL;
    
    
  5. 高级过滤:
    AND, OR, NOT, IN 操作符

    AND:
    	SELECT prod_name, prod_price, prod_id 
    	-->FROM products WHERE  prod_id = 100 AND prod_price < 10;
    OR:
    	SELECT prod_name, prod_price, prod_id 
    	-->FROM products WHERE prod_price = 25 OR prod_price = 28;
    结合(假如不用括号会先处理AND):
    	SELECT prod_name, prod_price, prod_id 
    	-->FROM products WHERE (prod_price = 25 OR prod_price = 28) AND vend_id = 1003;
    IN(功能与OR相似,但是比OR简短易懂):
    	SELECT prod_name, prod_price, prod_id 
    	-->FROM products WHERE vend_id IN (1002, 1003) ORDER BY prod_name;
    NOT(否定跟在后面的任何条件):
    	匹配1002和1003之外的供应商
    	SELECT prod_name, prod_price, prod_id 
    	-->FROM products WHERE vend_id  NOT IN (1002, 1003) ORDER BY prod_name;
    
  6. 使用通配符进行过滤:
    LIKE操作符,在搜索字句中使用通配符,必须使用LIKE操作符

    %通配符:表示任何字符出现任意次数
    	SELECT prod_name, prod_price, prod_id 
    	-->FROM products WHERE prod_name LIKE 'jet%' ; 找出jet起头的产品
    	
    	SELECT prod_name, prod_price, prod_id 
    	-->FROM products WHERE prod_name LIKE '%jet%' ; 任何位置包含jet的产品
    	SELECT prod_name, prod_price, prod_id 
    	-->FROM products WHERE prod_name LIKE 'j%t' ; 找出j起头,t结尾的产品
    下划线(_) 通配符: 用途和%一样,但是匹配单个字符(有且仅匹配一个字符)
    	SELECT prod_name, prod_price, prod_id 
    	-->FROM products WHERE prod_name LIKE '_ ton anvil' 
    	 Note: 2 ton anvil能匹配上,但是.5 ton anvil匹配不了 
    
    
  7. 用正则表达式进行搜索
    正则表达式对SELECT检索出来的内容进行过滤
    关键字: REGEXP, BINARY

REGEXP:
	SELECT prod_name FROM products 
	--> WHERE prod_name REGEXP '1000' ORDER BY prod_name; 检索prod_name列包含文本1000的所有行
	正则表达式中的(.),表示匹配任意一个字符
	SELECT prod_name FROM products 
	--> WHERE prod_name REGEXP '.000' ORDER BY prod_name;  检索prod_name列包含文本x000的所有行
BINARY 区分大小写:
    WHERE prod_name REGEXP BINARY 'JetPack .000'
进行OR匹配(|):
	SELECT prod_name FROM products 
	--> WHERE prod_name REGEXP '1000 | 2000 | 3000' ORDER BY prod_name;
匹配几个字符之一[]:
	SELECT prod_name FROM products 
	--> WHERE prod_name REGEXP '[123] Ton' ORDER BY prod_name; 匹配1 ton和2 ton等
匹配除这几个字符外[^]
	SELECT prod_name FROM products 
	--> WHERE prod_name REGEXP '[^123] Ton' ORDER BY prod_name;
匹配范围[-]:
	SELECT prod_name FROM products 
	--> WHERE prod_name REGEXP '[1-5] Ton' ORDER BY prod_name;
匹配特殊字符(\\)
	SELECT prod_name FROM products 
	--> WHERE prod_name REGEXP '\\.' ORDER BY prod_name; 包含.的产品名字
	Note: 匹配\需要写成\\\
	\\也用来引入元字符:
	\\f 换页		\\n 换行		\\r 回车		\\t 制表		\\v 纵向制表
匹配字符类:
	[: alnum:]  任何字母和数字
	[:alpha:] 	任何字符
	[:blank:]	 任何空格和制表 同[\\t]
	[:digit:] 	任何数字
	[:lower:]	任何小写
	[:upper:]	任何大写
	[:space:]	包括空格在内的任意空白字符
匹配多次:
	*  	0个或多个匹配
	+ 	等同于 {1,}
	? 	0个或1个{0,1}
	{n}	 	指定数目匹配
	{n,} 	不少于指定数目的匹配
	{n,m}	 匹配数目的范围 
	SELECT prod_name FROM products 
	--> WHERE prod_name REGEXP '\\([0-9] sticks?\\)'; 其中sticks?匹配stick和sticks
	SELECT prod_name FROM products 
	--> WHERE prod_name REGEXP '[[:digit:]]{4}';  4位数的
定位符:
^	文本的开始
$	文本的结尾
[[:<:]] 	词的开始
[[:>:]]		词的结尾
	SELECT prod_name FROM products 
	--> WHERE prod_name REGEXP '^[0-9\\.]'; 以一个数包括.开头的产品名
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值