SQL基础之数据的查询

一、数据查询的一般格式:

  

二、单表查询

  1. 查询指定列与计算的值

    (1) 查询指定列:只需在SELECT子句中加入要查询指定列字段即可,有时会根据题意要求去从,那么得在字段前添加DISTINCT关键字。

SELECT DISTINCT  Sno
FROM SC; 

    (2) 查询经过计算的值:在SELECT子句中的目标列表达式可以为如下:

  •  算术表达式
  •    字符串常量
  •    函数
  •    列的别名
SELECT Sname,2009-Sage  --查询算术表达式结果
FROM Student;

SELECT Sname,'Year of Birth:'    --查询字符串常量
FROM Student;

SELECT Sname,LOWER(Sdept)    --查询经过函数处理的字段信息结果
FROM Student;

--查询结果为列的信息,不过视图上列名为别名
SELECT Sname AS NAME,’Year of Birth: ’ AS BIRTH    
FROM Student;

  2. 查询满足条件的元组

    (1) 比较大小

    查询谓词:=,>,<,>=,<=,!=,<>,!>,!<;NOT+上述比较运算符

SELECT COUNT(Jno) AS '项目总数' FROM SPJ WHERE Sno = 'S1';

    (2) 确认范围:

    查询谓词:BETWEEN AND,NOT BETWEEN AND

SELECT Sname,Sdept,Sage
FROM Student
WHERE Sage BETWEEN 20 AND 23

    (3) 确认集合:

    查询谓词:IN ,  NOT IN    

SELECT Sname,Ssex
FROM  Student
WHERE Sdept IN ( 'IS''MA''CS' );

    (4) 字符匹配

    查询谓词:[NOT] LIKE ‘<匹配串>’ [ESCAPE ‘ <换码字符>’]

    匹配串为含通配符的字符串
    %:代表任意长度(长度可以为0)的字符串
    _:代表单个字符

--查询所有姓刘学生的姓名、学号和性别。
SELECT Sname,Sno,Ssex
FROM Student
WHERE  Sname LIKE '刘%'--查询姓"欧阳"且全名为三个汉字的学生的姓名。
SELECT Sname
FROM   Student
WHERE  Sname LIKE '欧阳_'

    使用换码字符ESCAPE将通配符转义为普通字符

--查询以"DB_"开头,且倒数第3个字符为 i的课程的详细情况。
SELECT  *
FROM   Course
WHERE  Cname LIKE  'DB\_%i_ _' 
ESCAPE ' \ ‘;

    (5) 空值查询

    查询谓词:IS NULL 或 IS NOT NULL

SELECT Sno,Cno
FROM  SC
WHERE  Grade IS NULL

    (6) 多重条件查询

    查询谓词:AND和OR来联结多个查询条件,其中查询条件又可包含上述的查询条件。

SELECT Sname
FROM  Student
WHERE Sdept= 'CS' AND Sage<20

   3. ORDER BY ... DESC/ASC (缺省值为升序)

    表示对查询结果的升降序显示,ASC为升序,DESC为降序。

SELECT Sno,Grade
FROM  SC
WHERE  Cno= ' 3 '
ORDER BY Grade DESC

    注意:

  •     当排序列含空值时,ASC:排序列为空值的元组最后显示,DESC:排序列为空值的元组最先显示。
  •     ORDER BY 不能在子查询中使用,由于ORDER BY是对查询结果的排序。

  4. GROUP BY ... HAVING ...    

    其作用对象是查询的中间结果表,最终结果表为按指定条件对查询结果的分组结果。

    GROUP BY后为分组依据(字段名),被指定的一列或多列值分组,值相等的为一组;HAVING后多为聚合函数满足条件,聚合函数将会分别作用于前面根据分组依据分完组的每个组。

/*查询供应了3个以上项目的供应商代码和供应的项目总数。*/
SELECT Sno, COUNT(DISTINCT Jno) AS '项目总数' 
FROM SPJ 
GROUP BY Sno 
HAVING COUNT(DISTINCT Jno) > 3;

    注意:

  •  使用Group By子句后,Select子句的字段列表达式只能是分组依据和聚集函数
  •    HAVING短语与WHERE子句的主要区别是作用对象不同,其中WHERE子句作用于基表或视图,从中选择满足条件的元组,而HAVING短语作用于组,从中选择满足条件的组

  5. 聚合函数

  计数:
  COUNT([DISTINCT|ALL] *)
  COUNT([DISTINCT|ALL] <列名>)
  计算总和:
  SUM([DISTINCT|ALL] <列名>)
  计算平均值:
  AVG([DISTINCT|ALL] <列名>)
  最大最小值:
  MAX([DISTINCT|ALL] <列名>)
  MIN([DISTINCT|ALL] <列名>)

SELECT COUNT(Jno) AS '项目总数' 
FROM SPJ 
WHERE Sno = 'S1';

  注意:只能在SELECT子句中或HAVING后使用。

二、连接查询

  1. 等值与非等值查询

  

猜你喜欢

转载自www.cnblogs.com/chenloveslife/p/9001822.html