数据库中select 查询详解 您所在的位置:网站首页 数据库怎么查询 数据库中select 查询详解

数据库中select 查询详解

2024-07-18 04:45| 来源: 网络整理| 查看: 265

数据查询操作介绍

在数据库操作中,使用频率最多的是查询操作。

查询数据时,根据不同的需求,条件对数据库中的数据进行查询 ,并返回结果

单表查询数据

查询数据库使用 select 命令。 这个命令相对比较复杂。可变化样式较多,这里分功能依次讲解。

查询数据表中所有数据 语法:select * from 表名

select * from t_student;

查询指定字段的显示 语法:select 字段1,字段2,... from 表名

select c_id,c_name,c_address from t_student;

as 别名 在查询时,默认结果显示的字段和表中字段名相同,可以通过别名来修改显示的样式 语法:select 字段1 as 别名,字段2 别名,... from 表名

select c_id as 学号 ,c_name as 姓名 ,c_address 地址 from t_student;

 

在给字段起别名时,可以使用 as ,也可以直接在字段后跟别名,省略 as 。

消除重复数据 在查询数据时,查询结果可能会有很多重复的数据,如果不想重复,可以使用 distinct 来实现去重。 语法:select distinct 字段名 from 表名

select distinct c_address from t_student;

注意:distinct 在去重时,会比较所有的指定字段,只有完全相同时才认为是重复的。

带条件查询 where 子句 查询数据时,需要根据不同的需求设置条件。 通过 where 子句来设置查询条件

select * from t_student where c_gender='男';

 

比较运算符

等于: =大于: >大于等于: >=小于: (select avg(c_age) from t_student);

列级子查询 作用:子查询返回的结果是一列(一列多行) 语法:主查询 where 条件 in (列子查询)

查询所有学生所在班级的班级名称

找出学生表中所有的班级 id找出班级表中对应的名字select * from t_class where c_id in (select c_class_id from t_student);

行级子查询 作用:子查询返回的结果是一行(一行多列) 语法:主查询 where (字段1,2,...) = (行子查询)

查找班级年龄最大,所在班号最小的的学生

找出最大年龄和最小班号找出年龄和班号满足条件的学生select * from t_student where(c_age,c_class_id) = (select max(c_age),min(c_class_id) from t_student);

自连接查询 作用:在查询数据时,只有一张表,查询时使用自己连接自己。 语法: select * from 表1 inner join 表2 on 表1.列 运算符 表2.列 where 条件

为什么需要自连接

以要设计表结构来存储 全国 所有的省份和 全国所有的市

设计省信息的表结构provincesid 省的编号

ptitle 省名称

设计市信息的表结构citys

id 市编号ctitle 市名称proid 市所属的省的编号

citys表的proid表示城市所属的省,对应着provinces表的id值

如果需要查询一个省 比如广东省对应的所有的时的信息 ,我们可以使用两个表连接查询。

> 问题: 能不能将两个表合成一张表呢? 观察两张表发现,citys表比provinces表多一个列proid,其它列的类型都是一样的。 这样做的**好处**在于: 存储的都是地区信息,而且每种信息的数据量有限,没必要增加一个新表,或者将来还要存储区、乡镇信息,都增加新表的开销太大。

定义表areas,结构如下

idatitle

pid

关于这个表的说明:

因为省没有所属的省份,所以可以填写为null城市所属的省份pid,填写省所对应的编号id这就是自关联,表中的某一列,关联了这个表中的另外一列,但是它们的业务逻辑含义是不一样的,城市信息的pid引用的是省信息的id

在这个表中,结构不变,可以添加区县、乡镇街道、村社区等信息

问题: 如果还是要查询广东省对应的所有的市的信息,咱们应该怎么做呢?

areas表和自身进行连接这种形式的连接 就成为自连接。

准备数据

创建areas表的语句如下: 注意,表所在的数据库字符集必须是utf8的,如果不是会导入数据出错 create table areas( aid int primary key, atitle varchar(20), pid int ); 从sql文件中导入数据 source /home/python/Desktop/areas.sql;

自查询

查询一共有多少个省

select count(*) from areas where pid is null;

查询省的名称为“山西省”的所有城市

select city.* from areas as city inner join areas as province on city.pid=province.aid where province.atitle='山西省';

查询市的名称为“广州市”的所有区县

select dis.* from areas as dis inner join areas as city on city.aid=dis.pid where city.atitle='广州市';



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

      专题文章
        CopyRight 2018-2019 实验室设备网 版权所有