SQL语言之简单表操作(四)

查询  Select的简单语法形式:

  Select 列名 [[, 列名 ]…]  From 表名

  [ Where  检索条件];

Select id, name, sex From Student;

检索条件where  逻辑运算符 and, or, not

Select name From student

Where (age < 15 or age >20) and id = '03';

结果唯一性  DISTINCT

Selcet Distinct id From student Where age>10;

结果排序  order by 列名 [asc | desc]

Select name From student 

Order By id asc;

模糊查询  列名 [not] listk "字符串"

  %  匹配零个或多个字符

  _  匹配任意单个字符

    转义字符,用于去掉一些特殊字符的特定含义,使其被作为普通字符看待,如用“\%”去匹配字符%,用\_去匹配字符_

Select name From student 

Where name Like '张%';

(Not) IN 子查询  表达式 [not] in (子查询)

Select * From Student
Where name in ("张三","李四");

Select name From student
Where id not in (Select id From course C, student S
          Where C.name = '李明' adn C.id = S.couser_id
          );  

β some / β all 子查询 

表达式 β some(子查询);  β all(子查询);

β是比较运算符  <, >, >=, <=, =, <>

语义:将表达式的值与子査询的结果进行比较口如果表达式的值至少与子査询结果的某一个值相比较满足β关系,则“表达式 β Some(子查询)的结果便为真

β All如果表达式的值与子査询结果的所有值相比较都满足β关系,则“表达式,β All(子査询)的结果便为真 

Select name From student
Where age <= All (Select age From sutdent);

(NOt) EXISTS 子查询  [not] Exists (子查询)

Select Distinct name From Student
Where exists (Select * From SC, Course C, Teacher T
             Where SC.course_id = C.id and SC.teacher_id =T.id and T.name = "张三"               
                    )                

聚集函数

SQL提供了五个作用在简单列值集合上的内置的聚集函数agfunc,分别是:COUNT、SUM、AVG、MAX、MIN

分组查询与分组过滤

分组:SQL可以将检索到的元组按照某一条件进行分类,具有相同条件值 的元组划到一个组或一个集合中,同时处理多个组或集合的聚集运算

分组的基本语法:

  Select   列名| expr| agfunc(列名)[[, 列名| expr| agfunc(列名)] …]

    From   表名1 [, 表名2 …]

  [ Where   检索条件]

  [ Group  by  分组条件] ; 

#求每一个学生的平均成绩
Select   id, AVG(Score)  From  SC Group  by  id; 

聚集函数是不允许用于Where子句中的:Where子句是对每一元组进行条 件过滤,而不是对集合进行条件过滤

分组过滤

若要对集合(即分组)进行条件过滤,即满足条件的集合/分组留 下,不满足条件的集合/分组剔除。

Having子句,又称分组过滤子句。需要有Groupby子句支持,换句话 说,没有Groupby子句,便不能有Having子句。 

Select   列名| expr| agfunc(列名)[[, 列名| expr| agfunc(列名)] …]

From   表名1 [, 表名2 …]

[ Where 检索条件]

[ Group  by   分组条件[ Having  分组过滤条件]] ;

#求不及格课程超过两门的同学的学号 
Select   student_id From  SC 
Where  Score < 60 
Group by   student_id Having Count(*)>2;     

HAVING子句与WHERE子句表达条件的区别

每一分组检查满 足与否的条件要 用Having子句 表达。 注意:不是每一行 都检查,所以使 用Having子句一 定要有Groupby 子句

每一行都要检查满足 与否的条件要用 WHERE子句表达

增加

insert into简单语法形式

  insert into 表名 [( 列名 [,列名]...]  

    values (值 [,], …);

values后面值的排列,须与into子句后面的列名排列一致

若表名后的所有列名省略,则 values后的值的排列,须与该表存储中的列名排列一致

Insert Into student (id, name, age)

  Values ("001", "小柒", 20);

更新

Update 表名 Set 列名 = 表达式1 (子查询) [,列名=表达式1(子查询)]…]

Where [条件表达式];

 Update student

  Set age = age *1.05;

删除

 Delete From 表名 [ Where 条件表达式];

Delete From studetn;
原文地址:https://www.cnblogs.com/ic710/p/11232955.html