sql必知必会

sql必知必会

sql必知必会

一、SELECT

1.检索数据:

  • 1.检索多个列:SELECT prod_id, prod_name from Products
  • 2.distinct:检索不同的值,作用全部列(过滤重复的) select distinct vend_id from Products
  • 3.注释:单行:-- 多行 /* */

2.排序检索数据(order by)

  • 1.按多个列排序:select * from Products order by prod_price, prod_dame (先按第一列排,在相 同中按第二列排)
  • 2.降序:order by prod_price DESC /descend/ (在多个列进行降序,需要在每个列后面加DESC)
  • 3.升序:ASC(ascending)默认(不经常用,本身默认为升序排列)
  • 4.排序优先级:列越靠前,排序优先级越高

3.过滤数据(where)

  • 1.where子句操作符:=等于、<>不等于、<=、>= 、between and、is null (与字符串类型列比较,需要加单引号)
  • 2.逻辑操作符:and 、or (多种组合时,优先级 and>or,使用括号来避免优先级组合错误)
  • 3.IN操作符:…where vend_id IN(‘DLL01’,‘BRS01’),IN操作符功能与多组OR类似
  • 4.NOT操作符:否定其后所有的条件(相当于对后面条件判断进行反转)

4.通配符过滤(like…)

  • 百分号(%):where prod_name LIKE ‘fish%’ %可代表0或多个字符
  • 3.下划线(_):只匹配任意单个字符
  • 3.注意:使用通配符必须使用LIKE,且只能搜索字符串;搜索查询更耗时,为了达到目的,尽量使用其他操作符

5.创建计算字段

  • 1.字符串拼接

    • 将多列字符串拼接维一列,+ (Access,SQL Server)、|| (Oracle)、Concat(,)函数 MySQL
    • 去空格函数:RTRIM()去右空格,LTRIM()去左空格、TRIM()去字符串左右两边空格。(许多数据库每列50个字符串,未装满以空格填充,因此需要使用函数去掉空格)
  • 2.算术计算

    • 例子:select id ,quantity, price, quantity*price AS expanded_price from OrderItems where order_num = 1001; 将表中中物品数量和单价相乘得出总支出金额。
    • 算术操作符:+ - * /
  • 3.AS(取别名)

    • 不是给表里的字段取别名,而是给查询结果表字段取别名,便于观看习惯
    • 常用场景:将多列合并为一列,或列名太长可读性差时。
  • 4.select相当于printf语句(省略FROM),可用于测试计算

    • 当select去掉FROM子句后,就不是查询作用,而是printf功能
    • 例子:select 3*2 将计算结果输出 (可用于测试计算,当作计算器使用)

6.函数:

  • 1.文本处理函数:

    • UPPER 字母大写
    • LTRIM: 去字符串左边空格
    • soundex :读音匹配函数
  • 2.数值处理函数:

    • ABS COS EXP PI SIN SQRT TAN

7.汇总数据(excel表操作)

  • AVG() 返回某列的平均值
  • COUNT() 返回某列的行数
  • MAX() 返回某列的最大值
  • MIN() 返回某列最小值
  • SUM() 返回某列之和

8.分组数据(GROUP BY)

  • 例:select order_num,count() AS items from OrderItems group by order_num having count()>=3 order by items,order_num
  • 1.group by 后接列名进行分组,与聚合函数配套使用
  • 2.having(过滤作用) 后接聚合函数,不能直接接字段。having过滤的是分组,where过滤的是行

9.联结表

  • 1.关系表:把信息分解成多个表,一类数据一个表。各表通过共同的值互相关联(关系型数据库)

  • 2.笛卡尔积:select * from A,B 若不用where等联结过滤,结果集会是这两张表的乘积组合

  • 3.内联结:INNER JOIN …ON…或者where 条件…

  • 4.自联结:自己表与自己表联结,当需要在一个表里面多次嵌套查询(子查询),可用自联结替代,更快

  • 5.外联结:以一张表为中心,返回其所有关联的行,不管对面表的行是否为null(包含了相关表中没有关联的行的行)

    • 1.与内联结的区别:外联结包含了为null的行(两表为连接的行),
    • 2.左外联结:from A left outer join B on… 以左边A表为中心
    • 3.右外联结:from A right outer join B on… 以右边B表为中心

10.组合查询(union 并集)

  • 1.例子:select name from A union select name from B2.3.
  • 2.每个查询必须包含相同的列,(两表数据不同,可通过取别名来强制相同)
  • 3.union all :不取消重复的行
  • 4.优点:简化复杂的where条件子句,简化从多个表中检索数据(目前所学,多个表检索数据用联结)

二、INSERT INTO

1.例子:insert into Customers(id,name,adress) values(‘1001’,‘曾行’,‘内江资中’)

2.安全的插入数据方法:把列名写出来

3.插入检索出的数据:insert into Customer_A(id,name,adress) select id,name,adress from Customer_B.

三、更新和删除数据

1.更新数据

  • 例:UPDATE Customers set cust_email = ‘[email protected]’ where cust_id = ‘曾行’ ;
  • 注意where 条件一定要加,否则更新所有行。

2.删除数据

  • 例:delete from Customers where cust_id =‘1001’

  • 注意:

    • 1.需加上where过滤语句,否则删除所有行,删除不了表本身;
    • 2.删除的是行,不是列,删除列用update
    • 3.外键:外键确保引用完整性,防止删除某个关系需要用到的行(如:联结关系)

四、创建删除表

1.创建表:create table Products( id char(10) not null, name char(10) not null ) ;逗号分隔每一个列

2.NOT NULL: 若定义not null ,则该列必须有值,逐渐不能为null
3.删除表:drop table Products;

五、视图(封装select语句、虚拟表)

1.定义:视图是虚拟的表,它对select语句进行封装,因为select返回的就是一张虚拟表,因此视图就是一张虚拟表

2.创建视图:Create VIEW ProdcuctCustomers AS +查询语句 (对查询语句进行封装)

3.使用视图时,后面还可以加where,对虚拟表再次进行过滤

六、存储过程(库函数)

1.定义:存储过程为以后使用而保存的一条或多条SQL语句,简单、安全、高性能(编译过形式存储)(类似库函数)

2.相当于库函数,执行存储过程可以传入参数、获取返回值

七、事务

1.定义:使用事务处理,确保SQL要么完全执行,要么完全不执行

2.回退:可以回退insert、update、delete语句,select不用回退

3.保留点(savepoint):回退时,可以回退到保留点

4.控制事务处理:关键在于将SQL语句组分解为逻辑块,判断何时回退到哪儿,何时提交

八、高级SQL特性

1.约素(constraint):

管理如何插入或处理数据库数据的规则,在表上添加约束来保证引用完整性

  • 1.主键(primary key):唯一标识表中的每一行,NOT NULL,特殊约束。一个表中只有一个主键(可单一、可组合字段)
  • 2.外键:其值必须为另一表的主键 。定义使用reference Customers(cust_id)关键字
  • 3.唯一约束(unique):除了主键外,其他列也想唯一,就使用唯一约束。可为NULL
  • 4.检查约束:保证列中的数据满足指定的条件(如:性别字段只能为:M、F) 定义:CHECK (quantity>0)

2.索引

  • 1:用来排序数据以加快搜索和排序操作的速度(类似字典)
  • 2.create index prod_name_ind on Products (prod_name) 将Products表的prod_name列设为索引 ,DBMS会动态更新索引,保存其内容的一个排过序的列表

3.触发器 TRIGGER(类似事件、外部中断)

  • 1.在特定操作时,自动执行。
  • 2.可以与特定表上的INSERT、UPDATE、DELETE操作相关联,来触发操作时进行改动操作,如:插入更新时将州名转为为大写