SQL必知必会笔记一

什么是SQL

  • SQL : Structured Query Language 结构化查询语言

基本概念

  • 数据库 database : 保存有组织的数据的容器
  • 表 table 是一种结构化的文件 用来存储某种特定类型的数据

  • 数据库中的每个表都有一个名字来标识.名字是唯一的.

  • 说明:表明

  • 模式 : 关于数据库和表的布局以及特性的信息

  • : 表中的一个字段. 所有的表都是由一个或多个列组成的.

  • 数据类型 : 所允许的数据的类型. 每个表列都有相应的数据类型.

  • : 表中的数据是按行存储的. 表中的一个记录.

  • 主键 : 一列or一组列,其值能够唯一标志表中的每一行.

    主键应该满足的条件:

    • 任意两行都不具有相同的主键值
    • 每一行都必须具有一个主键值. 主键值不与允许为 NULL
    • 主键列中的值不允许修改和更新
    • 主键值不能重用(若某行被删除 它的主键值不能再赋给以后的行)
  • 外键

检索数据

SELECT语句

  • 为了使用 SELECT 检索表数据. 必须至少给出两条信息. 想选择什么以及从什么地方选择.

检索单个列

 SELECT prod_name 
  FROM Products
  -- 从Products表中检索一个名为prod_name的列

检索多个列

  • 检索多个列仍然用相同 SELECT 语句.唯一不同的是必须在SELECT后面给出多个列名.列名之间用逗号分隔.

    SELECT prod_id,prod_name,prod_price,prod_desc
    FROM Products;

检索所有列

 SELECT *
  FROM Products;    

检索不同值

  • SELECT 语句返回所有匹配的行.

  • DISTINCT 关键字 : 指示数据库只返回不同的值

  • SELECT DISTINCT vend_id
    FROM Products;

限制结果

  • TOP 关键字 : 限制最多返回多少行

  • SELECT  prod_name
    FROM Products
    LIMIT 5;
    -- MySQL,SQlite,用的是LIMIT子句
    
    SELECT  prod_name
    FROM Products
    LIMIT 5 OFFSET 5;
    -- OFFSET 指定从哪儿开始
    
    SELECT  prod_name
    FROM Products
    LIMIT 5,4 
    -- LIMIT 5,4 即 LIMIT 4 OFFSET 5 前面是便宜量 后面是数量
  • 使用注释:

    • --
    • /* */

排序检索数据

排序数据

 SELECT  prod_name
  FROM Products
  ORDER BY prod_id;
  -- 注意ORDER BY子句的位置
  -- 排序可以使用检索列 / 也可以使用非检索列

按多个列排序

 SELECT  prod_id,prod_name,prod_price
  FROM Products
  ORDER BY prod_price,prod_name;
  -- 仅在多个行有相同prod_price时,才继续按prod_name排序

按列的位置排序

 SELECT  prod_id,prod_name,prod_price
  FROM Products
  ORDER BY 2,3;
  -- 先按第二个即prod_name排序,再按prod_price排序

指定排序方向

  • 数据排序不仅限于升序排序

  • 还可以使用 ORDER BY 子句进行降序

  • 必须指定 DESC 关键字

  • SELECT prod_id,prod_price,prod_name
    FROM Products
    ORDER BY prod_price DESC;
  • 在多个列上降序排序 必须对每一列指定 DESC 关键字

过滤数据

使用WHERE子句

  • WHERE 子句指定搜索条件

  • SELECT prod_name,prod_price
    FROM Products
    WHERE prod_price = 3.49;
  • WHERE 子句的位置在 ORDER BY 之前! 必须先选出数据才能排序

WHERE子句操作符

操作符 说明 操作符 说明
= 等于 > 大于
<> 不等于 >= 大于等于
!= 不等于 !> 不大于
< 小于 BETWEEN 在指定两个值之间
<= 小于等于 IS NULL 为NULL值
!< 不小于
  • 检查单个值

    SELECT prod_name,prod_price
    FROM Products
    WHERE prod_price <10;
  • 不匹配检查

    SELECT prod_id, prod_price, prod_name 
    FROM Products 
    WHERE vend_id <> 'DLL01';
  • 范围值检查

    SELECT prod_id, prod_price, prod_name 
    FROM Products 
    WHERE prod_price BETWEEN 5 AND 10;
  • 空值检查

    SELECT cust_name
    FROM Customers
    WHERE cust_email is null;

高级数据过滤

组合WHERE子句

  • AND 操作符号 : 满足所有条件

    select prod_id,prod_price,prod_name
    from Products 
    where vend_id = 'DLL01' AND prod_price <= 4;
  • OR 操作符 : 任一条件满足

    select prod_name,prod_price
    from Products 
    where vend_id = 'DLL01' or vend_id = 'BRS01';

    AND 的优先级高于 OR 注意使用圆括号 ()

  • IN 操作符 : 用来指定条件范围 范围中每个条件都可以进行匹配

    IN 取一组逗号分隔括在圆括号内的合法值.

    select prod_name,prod_price
    from Products 
    where vend_id in ('DLL01','BRS01');
  • NOT 操作符 : 否定其后的条件!

    select prod_name
    from Products 
    where vend_id not in ('DLL01','BRS01');

使用通配符进行过滤

LIKE 操作符

  • 通配符 : 用来匹配一部分特殊字符
  • 搜索模式 : 字面值 通配符 或二者组成的搜索条件
  • 谓语 :

百分号 % 通配符

  • % 表示任何字符出现任意次数!

  • -- 找出所有以词Fish起头的产品
    select prod_id,prod_name
    from Products 
    where prod_name like 'Fish%';
  • % 不会匹配 NULL 的行!

下划线 _ 通配符

  • _ 表示单个字符!

  • -- _ 表示单个字符
    select prod_id,prod_name
    from Products 
    where prod_name like '_ inch teddy bear';
    --where prod_name like '__ inch teddy bear';

方括号 [] 通配符

  • [] 表示指定一个字符集.它必须匹配指定位置的一个字符

  • -- 找出所有以J或M开头的联系人
    select cust_contact
    from Customers
    where cust_contact like '[JM]%';
    -- 否定
    -- where cust_contact like '[^JM]%';
    -- where not cust_contact like '[JM]%';

猜你喜欢

转载自blog.csdn.net/qjh5606/article/details/80159995