数据库基本语法


数据库基本语法

SELECT语句

  • SELECT 列名 FROM 表明; 单行检索,多行检索
  • SELECT DATABASE(); 显示当前使用数据库
  • 检索不同的行:SELECT DISTINCT 列名 FROM 表明; 只返回不同的值
  • 限制结果:SELECT 列名 FROM 表明 LIMIT 限制的行数;
    • 指定开始行数和行数:SELECT 列名 FROM 表明 LIMIT 5,5;
      • LIMIT 5 OFFSET 5;
  • 使用完全限定的表明:SELECT products.pro_name FROM 表明;

排序检索数据:使用ORDER BY语句

  • 排序数据:SELECT prod_name FROM products ORDER BY prod_name;
  • 按多个列排序:SELECT prod_id,prod_price,prod_name FROM products ORDER BY prod_price,prod_name;
    • 注意:在多行排序中,是按照指定的行书顺序进行排序的,如上,先是以价格排序,然后在价格相同的数据中再以姓名排序。如果价格都不相同则就不会以姓名排序。
  • 指定排序方向(DESC关键字):SELECT prod_id,prod_price,prod_name FROM products ORDER BY prod_price DESC; 按照价格以降序的方式排序产品
  • ASC是默认升序的关键字
  • ORDER BY子句位置:要保证ORDER BY位于FROM子句之后。如果使用LIMIT,它必须位于ORDER BY之后。

过滤数据:使用WHERE语句

  • 数据根据WHERE子句中指定搜索条件进行过滤,WHERE子句在表明(FROM子句)之后给出:SELECT prod_name,prod_price FROM products WHERE prod_price=2.50;
  • WHERE子句操作符:=,<>,!=,<,<=,>,>=,BETWEEN
    • BETWEEN匹配范围中所有的值,包括指定开始值和结束值
      • SELECT prod_name,prod_price FROM products WHERE prod_price BETWEEN 5 AND 10;
  • 空值检查:
    • NULL 无值(no value):SELECT prod_name FROM products WHERE prod_price IS NULL;
  • WHERE子句的位置:在同时只用ORDER BY和WHERE子句时,应该让ORDER BY位于WHERE之后,否则就会产生错误

数据过滤

组合WHERE语句

  • AND操作符
  • OR操作符
    • 注意:当使用AND和OR的联合查询时,要考虑到操作符优先级问题,使用圆括号明确的分组相应操作符
  • IN操作符:IN在WHERE子句中用来指定要匹配值的清单的关键字,功能与OR相当
  • NOT操作符:一般情况下与IN,BETWEEN,EXISTS子句配合使用,相当于否定跟在它后面的条件。
    • SELECT prod_name,prod_price FROM products WHERE vend_id NOT IN (1002,1003) ORDER BY prod_name;

通配符进行过滤

  • LIKE操作符:模糊查询
    • 百分号(%)通配符:搜索模式中给定位置的0个,1个或多个字符
      • 注意:‘%’不能匹配用值NULL作为产品名的行,在匹配时是默认不区分大小写的
    • 下划线(_)通配符:只匹配单个字符
  • 注意:不要过度的使用通配符,在确定要使用通配符的时候,除非绝对必要,否则不要将它们用在搜索模式的开始处,将通配符置于搜索模式的开始处,搜索的效率是很慢的

使用正则表达式进行搜索

  • REGEXP :regesxp

    • 进行OR匹配:搜索两个串之一,使用 ‘ | ’

      • SELECT prod_name FROM products WHERE prod_name REGEXP '1000|2000' ORDER BY prod_name;
    • 匹配几个字符之一:可以指定一组用[ 和 ]括起来的字符来完成。

      • SELECT prod_name FROM products WHERE prod_name REGEXP '[123] Ton' ORDER BY prod_name
        • 正则表达式[123] Ton[123]定义一组字符,其含义是匹配1或2或3。可以理解成[1|2|3] Ton
        • 字腹肌和也可以被否定,即,它们将匹配除指定字符外的任何东西。否定一个字符集只需哟在集合开始的地方放置一个 ^ 即可。就比如:[^123] 匹配出这些字符外的任何东西
    • 范围匹配:[0-9],[a-z] 匹配任意数字和字符串,定义一个范围

      • 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;
    • 匹配字符类

      ​ 字符类

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

    • 匹配多个实例

      ​ 重复元字符

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

      范例:

      • SELECT prod_name FROM products WHERE prod_name REGEXP '\\([0-9] sticks?\\)' ORDER BY prod_name
        • 注意:sticks? 会匹配到stick与sticks(s后的?使s可选,因为?匹配它前面的任何字符的0次或1次出现)。
      • SELECT prod_name FROM products WHERE prod_name REGEXP '[[:digit:]]{4}' ORDER BY prod_name;
        • [:digit:] 匹配任意数字,所以会查找到一个数字的集合。{4}表示要求它前面的字符(任意数字)出现4次,所以就会查找到存在4个数字字符的集合,如1000,8563,7354。也可以用[0-9][0-9][0-9][0-9]来替代上边的查询语句,其效果是一样的。

####