数据库---数据库查询的各种子句

基本查询
 orderby子句
  形式:
    order by 排序字段1 [排序方式], 排序字段2 [排序方式], .....
  说明:
    对前面取得的数据(含from子句,where子句,group子句,having子句的所有结果)来指定按某个字段的大小进行排列(排序),排序只有2种方式:
    正序: ASC(默认值),可以省略
    倒序: DESC
     如果指定多个字段排序(虽然不常见),则其含义是,在前一个字段排序中相同的那些数据里,再按后一字段的大小进行指定的排序。

    

    

 limit子句
  形式:
    limit [起始行号start], 要取出的行数num
  说明:
    表示将前面取得的数据并前面排好之后(如果有),对之指定取得“局部连续的若干条”数据。
    起始行号start:第一行的行号为0, 可以省略,则为默认行号(0)。
    要取得的行数:如果结果集中从指定的行号开始到最后没有这么多行,则就只取到最后。

此子句非常有用——主要用于网页上最常见的一个需求(现象):分页。

分页原理:
  分页的前提:人为指定每页显示的条数,$pageSize = 3;
  显示(取得)第1页数据:select * from 表名 limit 0, $pageSize;
  显示(取得)第2页数据:select * from 表名 limit 3, $pageSize;
  显示(取得)第3页数据:select * from 表名 limit 6, $pageSize;
显示(取得)第$n页数据:select * from 表名 limit ($n-1)*$pageSize, $pageSize;

连接查询
  连接就是指两个或2个以上的表(数据源)“连接起来成为一个数据源”。

  实际上,两个表的完全的连接是这样的一个过程:

  左边的表的每一行,跟右边的表的每一行,两两互相“横向对接”后所得到的所有数据行的结果。

注意:连接之后,并非形成了一个新的数据表,而只是一种“内存形态”。

语法形式:from 表1 [连接方式] join 表2 [on 连接条件];

例:

select * from course join teacher on course.cno=teacher.cno
select student.sno,course.cname,score.degree from student
join score on score.sno=student.sno
join course on course.cno=score.cno;

交叉连接:
  实际上,交叉连接是将两个表不设定任何条件的连接结果。
  交叉连接通常也被叫做“笛卡尔积”——数学上可能比较多。
语法形式:
  from 表1 [cross] join 表2 ;     //可见交叉连接只是没有on条件而已。
  cross这个词也可以省略,还可以使用inner这个词代替

内连接:相当于连接查询
语法:
  from 表1 [inner] join 表2 on 表1.字段1=表2.字段2;

左[外]连接:
形式:
  from 表1 left [outer] join 表2 on 连接条件。
说明:
  1,这里,left是关键字。
  2,连接条件跟内连接一样。
  3,含义是:内连接的结果基础上,加上左边表中所有不符合连接条件的数据,相应本应放右边表的字段的位置就自动补为“null”值。

右[外]连接:
形式:
  from 表1 right [outer] join 表2 on 连接条件。
说明:
  1,这里,right是关键字。
  2,连接条件跟内连接一样。
  3,含义是:在内连接的结果基础上,加上右边表中所有不符合连接条件的数据,相应本应放左边表的字段的位置就自动补为“null”值。

全[外]连接:

相当于左外查询和右外查询的合集。
形式:
  from 表1 full [outer] join 表2 on 连接条件;
说明:
  1,含义:其实是左右连接的“并集”(消除重复项),即内连接的结果,加上左表中不满足条件的所有行(右边对应补null),再加上,右表中不满足条件的所有行(左边对应补null)。
  2,mysql中其实不认识全[外]连接语法,即mysql这个软件本身不支持全连接的语法。
  3,此概念在其他数据库有的存在,了解就可以。

 

常见子查询及相关关键字

子查询
  一个查询,通常就是一个select语句(即出现一次select关键字)
  但,如果在一个select查询语句中,又出现了select查询语句,此时就称后者为“子查询”,前者就是“主查询”
形式:
  selelct 字段或表达式或(子查询1) [as 别名] from 表名或(子查询2) where 字段或表达式或(子查询3) 的条件判断

使用in子查询
in的基本语法形式为:
  where 操作数 in (值1,值2, ....)
则in子查询就是:
  where 操作数 in ( 列子查询 );
含义:
   表示该操作数(字段值) 等于 该子查询的其中任意一个只,就算满足条件。

使用any子查询
使用形式:
  where 操作数 比较运算符 any ( 列子查询 );
说明:
  1操作数通常仍然是字段名
  2比较运算符就是常规的〉  〉=  <   <=  =   <> 
  3列子查询也可以是标量子查询,都表示“若干个数据值”
含义:
  表示该操作数的值只要跟列子查询的任意一个值满足给定的比较运算,就算满足了条件——就是只要有一个成就成。

特殊情况:
  where 操作数 = any ( 列子查询 );
 则其完全相当于:
  where 操作数 in ( 列子查询 );

使用all子查询
  where 操作数 比较运算符 all ( 列子查询 );
说明:
  1操作数通常仍然是字段名
  2比较运算符就是常规的〉  〉=  <   <=  =   <> 
  3列子查询也可以是标量子查询,都表示“若干个数据值”
含义:
  表示该操作数的值必须跟列子查询的所有值都满足给定的比较运算,才算满足了条件。

使用some的子查询
  some是any的同义词。一样用。

使用exists的子查询
形式:
  where exists (子查询);
含义:
  如果该子查询有结果数据(无论什么数据,只要大于等于1行),则就是true,否则为false

not exists子查询:

  和exists子查询相反。

联合查询
  联合查询的关键字是: union 对行的扩展,两张表 字段相同,结果不同
  连接查询的关键字是: join 对列的扩展,两张表左右拼起来
联合查询就是将两个select语句的查询结果“层叠”到一起成为一个“大结果”。
两个查询结果的能够进行“联合”的先觉条件是:结果字段数相等。

语法形式:
  select 语句1 union [ALL | DISTINCT] select 语句2;
说明:
  1,两个select语句的输出段(结果字段)一样数目一样,应用中通常类型一样才有意义。
  2,结果集中的字段以第一个select语句的字段为准。
  3,第一个select语句的字段可以做别名,但如果做别名,则后续的where,group,order等子句应该用该别名。
  4,联合查询默认是会消除重复项的(DISTINCT),要想不消除,则必须明确些“ALL”。
  5,如果要对整个联合结果进行排序或limit,则应该对各自的select语句加括号:
    (select 语句1)
      union
    (select 语句2)
      order by ..... limit ....;

例:

#31、 查询所有教师和同学的name、sex和birthday.
select sname,ssex,sbirthday from student
union
select tname,tsex,tbirthday from teacher;
#32、查询所有“女”教师和“女”同学的name、sex和birthday.
select sname,ssex,sbirthday from student where ssex="女"
union
select tname,tsex,tbirthday from teacher where tsex="女";

原文地址:https://www.cnblogs.com/1301694f/p/8451990.html

时间: 2024-12-15 23:40:05

数据库---数据库查询的各种子句的相关文章

数据库表的查询操作(实验二),数据库表查询实验

[实验目的]:了解SQL语言的使用,进一步理解关系运算,巩固数据库的基础知识.[实验要求]:掌握利用Select语句进行各种查询操作:单表查询.多表连接及查询.嵌套查询.集合查询等.[实验内容]一.单表查询1.简单查询打开查询分析器,根建立teacher表,并加入数据.从teacher表中分别检索出教师的所有信息,以及仅查询教工号.姓名和职称.语句如下: select * from teacher select tno, tname from teacher 如要查询时改变列标题的显示,则从te

MySQL、SqlServer、Oracle三大主流数据库分页查询 (MySQL分页不能用top,因为不支持)

一. MySQL 数据库 分页查询MySQL数据库实现分页比较简单,提供了 LIMIT函数.一般只需要直接写到sql语句后面就行了.LIMIT子 句可以用来限制由SELECT语句返回过来的数据数量,它有一个或两个参数,如果给出两个参数, 第一个参数指定返回的第一行在所有数据中的位置,从0开始(注意不是1),第二个参数指定最多返回行数.例如:select * from table WHERE … LIMIT 10; #返回前10行select * from table WHERE … LIMIT

数据库常用查询语句写法(优化)

常用查询写法 Like like本身效率就比较低,应该尽量避免查询条件使用like: 原因: 对于like '%...%'(全模糊)这样的条件,是无法使用索引的,全表扫描自然效率很低: 由于匹配算法的关系,模糊查询的字段长度越大,模糊查询效率越低. 解决办法: 尽量避免模糊查询,如果因为业务需要一定要使用模糊查询,则至少保证不要使用全模糊查询,对于右模糊查询,即like '-%',是会使用索引的: 左模糊like'%...'无法直接使用索引,但可以利用reverse + function ind

【MySQL笔记】数据库的查询

数据库的查询 注:文中 [ ...] 代表该部分可以去掉. 理论基础:对表对象的一组关系运算,即选择(selection).投影(projection)和连接(join) 1.select语句 子语句顺序: select  [distinct | distinctRow | all]    ----distinct关键字会在结果集中去掉重复的值而只保留一个值,否则有重复值 from where group by having order by                           

数据库分页查询方法

在这里主要讲解一下MySQL.SQLServer2000(及SQLServer2005)和ORCALE三种数据库实现分页查询的方法. 可能会有人说这些网上都有,但我的主要目的是把这些知识通过我实际的应用总结归纳一下,以方便大家查询使用. 下面就分别给大家介绍.讲解一下三种数据库实现分页查询的方法. 一. MySQL 数据库分页查询 MySQL数据库实现分页比较简单,提供了LIMIT函数.一般只需要直接写到sql语句后面就行了. LIMIT子句可以用来限制由SELECT语句返回过来的数据数量,它有

提高数据库处理查询速度

提高数据库处理查询速度 1.对查询进行优化,应尽量避免全表扫描,首先应考虑在 where 及 order by 涉及的列上建立索引. 2.应尽量避免在 where 子句中对字段进行 null 值判断,否则将导致引擎放弃使用索引而进行全表扫描,如: select id from t where num is null 可以在num上设置默认值0,确保表中num列没有null值,然后这样查询: select id from t where num=0 3.应尽量避免在 where 子句中使用!=或<

转载:30多条mysql数据库优化方法,千万级数据库记录查询轻松解决

1.对查询进行优化,应尽量避免全表扫描,首先应考虑在 where 及 order by 涉及的列上建立索引. 2.应尽量避免在 where 子句中对字段进行 null 值判断,否则将导致引擎放弃使用索引而进行全表扫描, Sql 代码 : select id from t where num is null; 可以在 num 上设置默认值 0,确保表中 num 列没有 null 值,然后这样查询: Sql 代码 : select id from t where num=0; 3.应尽量避免在 wh

数据库的查询笔记

数据库的查询笔记 1. 在字符查询语句中:WHERE 语句中的筛选条件应该用LIKE,NOT LIKE 来表达是否匹配.如下所示; SELECT S.* FROM tb_Major AS S WHERE S.ShortName  LIKE '公共事业管理% '; 一定不能表示成 SELECT S.* FROM tb_Major AS S WHERE S.ShortName  = '公共事业管理% '; 2. 用户查询的字符串本身就含有通配符%或者-时,需要使用ESCAPE'<换码字符>'短语对

django指定mysql数据库 ORM查询

django原生自带数据库,不过自带的数据库是sqlite 这次使用的orm框架操作数据库 这时候你就需要换上你想用的数据库比如大众化的mysql 但是你还是首先要先安装pymysql的驱动 pip install PyMySQL 在Django的工程同名子目录的__init__.py文件中添加如下语句 from pymysql import install_as_MySQLdb install_as_MySQLdb()django 在python2.7一直使用的是db操作数据库由于django