数据库

一、初识MySQL

    数据库(Database)就是一个存储数据的仓库。为了方便数据的存储和管理,它将数据按照特定的规律存储在磁盘上。通过数据库管理系统,可以有效地组织和管理存储在数据库中的数据。


二、数据库的安装和配置

    见软件安装文件


三、数据库服务器操作(开启、关闭)

    服务器的启动和停止有2种方法:系统服务器和命令提示符

   1、系统服务器

     搜索“服务”---mysql 右击(启动,停止)

   2、命令提示符

     搜索cmd----右击以管理员身份运行

     启动服务器:

     net start mysql

     停止服务器:

      net stop mysql


四、(登陆及退出服务器)连接和断开服务器

   1、连接服务器:

     mysql -uroot -p123    (u---user用户名 p-password密码)

   2、断开服务器:

     exit   quit   \q   3个方法都可以


五、相关概念

   1、数据管理:指对各种数据进行分类、组织、编码、存储、检索和维护。

   2、数据管理技术经历了3个阶段:

     人工管理阶段、文件系统阶段、数据库系统阶段

   3、数据库(DB):是指长期保存在计算机的存储设备上,按照一定的规则组织起来,可以被共享的数据集合。

   4、数据库管理系统(DBMS):是指一种操作和管理数据库的软件,用于建立,使用和维护数据库,对数据进行统一管理和控制,以保证数据库的安全性和完整性。

   5、数据库系统:是采用数据库技术的计算机系统。由数据库、数据库管理系统、数据库管理员、数据库的硬件和软件、以及用户5部分构成的运行实体。


六、数据模型的概念:

    1、数据模型是由(数据结构、数据操作、完整性约束)3部分构成。

    2、常见的数据模型有哪些?

      1)层次模型----树状结构

      2)网状模型----有向图结构

      3)关系模型----二维表结构(excel 表格)


    3、我们主要讲关系模型,由(关系数据结构,关系操作集合和完整性约束)3部分构成。


七,数据库的种类的特点

    1、SQL server     ----适用于入门者 (只能在windows上运行,没有开放性)

    2、Mysql         ----小型数据库(体积小,速度快,成本低,使用简单)

    3、oracle         ----强大的功能和可配置、可管理能力(开放性,安全性)

    4、DB2           ----兼容性好,风险小


八、建库操作(建库、查看、使用、删除)

    数据库:database

    创建:create

    展示,表演:show

    使用: use

    删除:drop


    1、创建数据库:

      格式: create database 数据库名;

      另外一个格式:

      create schema数据库名;

    2、查看所有的数据库:

      格式:show databases;          // cat(一只猫)     cats(多只猫)

    3、删除数据库:

      格式:drop database 数据库名;

    4、使用数据库(选择该数据库为当前数据库):

      格式:use 数据库名;



七、关系模型的基本属性

    1)关系(一张二维表)

    2)记录(行)

    3)字段(列)

    4)域  (取值范围)


八、创建数据库:

    1、create database 1905a;

    解释:如果系统中不存在1905a这个数据库,则就创建1905a数据库。

         如果系统中已经存在1905a这个数据库了,则系统报错。

    2、createdatabase if not exists 1905a;

    解释:如果系统中不存在1905a这个数据库,则就创建1905a数据库。

          如果系统中已经存在1905a这个数据库了,则不创建1905a数据库,但是系统不报错。


九、删除数据库:

    1、drop database 1905a;

    解释:如果系统中存在1905a这个数据库,则就删除1905a数据库。

         如果系统中不存在1905a这个数据库了,则系统报错。

    2、drop database if exists 1905a;

    解释:如果系统中存在1905a这个数据库,则就删除1905a数据库。

         如果系统中不存在1905a这个数据库了,则不删除而已,系统不报错。


十、数据库的编码(字符集)设置

    格式:create

database 数据库名character set =utf8;

     创建    数据库   数据库名  编码  设置 成utf8


十一、数据库命名规则:

    1、不能与其他数据库重名,否则报错

    2、可以由字母、数字、下划线、$符号组成,但是不能全部是数字

    3、不能使用数据库中的关键字作为数据库名、表名

    4、名称最长为64个字符

    5、数据库中不区分大小写

[if !supportLists]一、[endif]SQL:结构化查询语言(structured query language)


二、数据库的语法要求:

    1、可以在单行或多行书写,以分号结尾

    2、注释格式:   /*注释内容*/

    3、不区分大小写   例如:create 与 CREATE 一样


三、数据类型:数值类型、字符串类型、日期和时间3种类型。

1、数值类

整型(int)--默认11位

浮点型(float 或double)    decimal  float(5,2)----共5位数,保留2位小数

2、字符串类型: char(长度固定)      varchar(长度可变)   text    -赋值时加单引号

Varchar(40)   char(40)  3

3、日期和时间:日期(date)  时间(time)      datetime                 --赋值时加单引号


123   int

123.123  float(6,3)

张三a1 varchar(20)

2019-11-19 date

14:24:14    time

四、创建数据表的格式:

    创建:create   表格:table

Id name sex  score


   create table表名(

    列名1  列类型,

    列名2  列类型,

   ....

    列名n  列类型

    );


五、查看数据库的表

    格式: show tables;


六、查看数据表的结构(结构---就是表里有几个字段,每个字段什么类型)

    两种方法:

    方法一:

    格式:desc 表名;   或者:describe 表名;    (describe(描述) 简写 desc)  

    方法二:

    格式:

      showcolumnsfrom表名;    (columns---列)


一、表的结构(结构指的是表中有几个字段,每个字段什么类型)

    选择数据库:use 数据库名;

    修改表结构前缀使用 alter table 表名


二、修改表的结构(增删改查)


    1、查看数据表的某个字段的结构(某一列的结构)

       格式:desc 表名  字段(列)名;

 

   2、增加字段(一个或多个)

       (增加一个字段)格式:alter

table 表名 add 新字段名 新字段类型;

       (增加多个字段)格式:alter

table 表名 add (新字段名1 新字段类型,新字段名2 新字段类型);

 

    3、删除字段(一个或多个)

       (删除一个字段)格式:alter

table 表名 drop 字段名;

 

       (删除多个字段)格式:alter

table 表名 drop 字段名1,drop 字段名2,....,drop 字段名n ;

        注意:不能删除所有的字段,至少保留1个字段。


    4、修改字段(字段类型或者字段名)

       1)修改字段类型

         (修改一个字段)格式:alter

table 表名 modify 字段名 字段类型;

         (修改多个字段)格式:alter

table 表名 modify 字段名1 字段类型,modify 字段名2 字段类型;

 

       2)修改字段名

         (修改一个字段)格式:alter

table 表名 change 原字段名  新字段名  字段类型;

         (修改多个字段)格式:alter

table 表名 change 原字段名1 新字段名1 字段类型,change 原字段名2 新字段名2 字段类型;


三、数据表的删除命令(drop):

    格式:drop table 表名;


四、修改表名(rename--重命名):

    有2种方法:

    方法一:

          格式:alter table 原表名rename to 新表名;

           或者:alter table 原表名 rename as 新表名;

    方法二:

          格式:rename table原表名 to 新表名;

如何向数据表中添加数据呢? 使用insert语句实现。


一、数据插入(假设表中有3个字段)

    (所有字段数据输入)

     格式:

     insert into 表名(字段1,字段2,字段3)        ------插入1行记录

     values(值1,值2,值3);


    insert into表名 (字段1,字段2,字段3)      ------插入3行记录

    values(值1,值2,值3),(值1,值2,值3),(值1,值2,值3);


    (部分字段数据插入)

     格式:

    insert into表名 (字段2,字段3)              ------插入1行记录

    values(值2,值3);


    insert into表名 (字段2,字段3)      ------插入3行记录

    values(值2,值3),(值2,值3),(值2,值3);


     注意:所有字符串数据和日期时间数据必须用单引号。

     系统默认字符串是字符型,如果想使用汉字,则需要设置:set names gbk;


查看表中数据:select * from表名;

如果数据插入错误,如何更改数据呢?使用update语句实现。


二、修改表记录

 格式:

 update 表名 set 字段=值(改谁的就写谁的名字)   where条件;  --修改一个字段值

 update表名 set 字段1=值1,字段2=值2....  where条件;    ------修改多个字段值


三、删除记录(2种方法)

    方法一:     格式:delete from 表名;(不清除格式)

删除表中某个记录:格式    delete from表名 where 条件

    方法二:     格式:truncate  表名;(格式也全部清除


四、数据库备份和恢复

    1、数据库备份(生成数据库脚本):(备份的是数据库的内容,不是备份数据库)

      格式:mysqldump

-u用户名 -p密码 数据库名>生成脚本的文件路径(扩展名是.sql)

      例如:mysqldump -uroot -p123  1905a>d:\1905a.sql

      注意:

           1、语句结尾不要打分号,不要连接数据库,直接在cmd下运行。

           2、生成的脚本文件中不包含 create database 语句。

    2、恢复数据库

      格式:mysql

-u用户名  -p密码 数据库名<备份的脚本路径

      例如:

          1、先删除mysql数据库,再重新创建一个空的数据库mysql(为恢复数据库内容做准备)

          2、mysql -uroot -p123  mysql

      注意:

           1、语句结尾不要打分号,不要连接数据库,直接在cmd下运行。


单表查询:在一张表中查询所需要的数据。

什么是查询语句呢?使用select语句进行查询功能,它的使用有些复杂,但是功能非常强大。

一、查询所有字段

    1、查询所有字段是指查询表中所有字段的数据。

    2、在Mysql中使用"*"代表所有的字段。

3、语法格式:select * from 表名;


二、查询指定字段

    1、查询指定字段是指查询指定的部分字段。

    2、语法格式:

      select 字段名 from 表名;

    3、如果查询多个字段,使用“,”对字段进行分隔

      语法格式:

      select字段名1,字段名2,字段名3 from 表名;


三、去重查询(重复记录只查询一次)

    1、使用关键字distinct可以去除查询结果中的重复记录

    2、语法格式:

      select distinct 字段名 from 表名;


四、列运算(掌握运算符)

    1、列运算:列和列之间进行运算。

    2、了解运算符:

      1)算术运算符:+  -   *   /(div)  %(mod)  10/3  =3.。。1

      2)比较运算符:> >=   <   <=  =  !=  <>

      3)逻辑运算符:and(&&)与  or(||)或 not(!)非

    3、列运算实践:

      1)数值类型的列可以做算术运算(+

- * / %)

          例如:select 列*1.5   from表名;

                select列1+列2  from表名;

                select列1*列2  from表名;

      2)字符串类型的列可以做连接运算  (concat(列1,列2)或者concat('字符常量',列))

例如:

              select concat(列1,列2) from 表名;

              select concat('$',列) from 表名;

      3)数值型

         转换NULL值 (把值是NULL的列转换成数值0计算)

         ifnull(age,0)-----把age列中存在的NULL值当成0来计算。

          字符型

         ifnull(sname,'无姓名')-----把sname列中为NULL的转换为无姓名

      4)给列起别名

         例如:select 列1+列2 as 名字 from 表名;

         注意:as 可以省略

五、查询指定数据(补充)

    1、在很多条记录中查询出符合条件的记录,设定查询条件用where子句。

    2、例如,查询编号为6的学生记录

      select * from 表名 where id=6;

    3、例如,查询名字为张三的学生记录

      select * from表名 where name='张三';


一、掌握集合查询(in)

    1、关键字in可以判断某个字段的值是否在指定的集合中。

      1)如果字段的值在集合中,则满足查询条件,该记录可以被查询出来。

      2)如果字段的值不在集合中,则不满足条件,该记录不能被查询出来。

    2、案例实践

      1)查询学号是1001,1002,1003的记录

         select * from 表名 where id

in(1001,1002,1003);

      2)查询学号不是1001,1002,1003的记录

         select * from 表名 where id not

in(1001,1002,1003);


二、掌握范围查询(between...and)

    1、关键字between...and可以判断某个字段的值是否在指定的范围中。

      1)如果字段的值在指定的范围中,则满足查询条件,该记录可以被查询出来。

      2)如果字段的值不在指定的范围中,则不满足条件,该记录不能被查询出来。

    2、案例实践

      查询年龄在20到40之间的学生记录

            select * from表名where agebetween 20 and 40;

       或者:select *

from 表名where age>=20  and age<=40;


三、掌握空值及多重条件查询(is null,and,or)

    1、空值查询(is null)----------不能用等于(=)号

      查询年龄为null的记录 

      select * from 表名 where age is

null;

    2、查询姓名不为null的学生记录

      select * from 表名 where name

is not null;

      或者:select * from 表名wherenot name is null;

               3、带关键字and的多条件查询

      1、查询年龄大于25岁的男讲师

         select * from 表名 where

age>25 and sex='男';

      2、查询出性别为男、年龄在30岁以下的精英学院的教师

         select * from表名 where sex='男'and age<30 and xueyuan='精英学院';

    4、带关键字or的多条件查询

      查询出部门为大数据或者收入在5千以上教师姓名、性别、年龄

      select name,sex,age

from 表名 where bumen='大数据' or money>5000;


四、限制查询结果的数量----limit关键字(补充)

   1、查询数据时,可能会查询出很多的记录,而用户需要的记录可能只是很少的一部分,这样就需要来限制查询结果的数量。

     关键字limit可以对查询结果的记录条数进行限定,控制它输出的行数。

   2、显示前3条记录  select * from表名 limit 3;

   3、使用关键字limit还可以查询结果的中间部分取值。

     两个参数,参数1是开始读取的第一条记录的编号(在查询结果中,第一个结果的记录编号是0,而不是1);

                参数2是要查询记录的个数。    

     例如:查询出第2条到第4条记录信息  select * from表名limit 1,3; 234


一、约束的作用

    作用:完整性约束是为了表的数据的正确性,如果数据不正确,则数据不能添加到表中。


二、约束的分类

    1、主键约束-----唯一标识(用于整型INT后)

      a:当某一列添加了主键约束后,那么这一列的数据就不能重复出现,也不能为空。

      b:每一个表中只能定义一个主键,可被外键引用。

      c:指定主键约束的关键字primary key

      d:主键约束的方式有3种:

        1)创建表的列的同时指定主键      格式: 列名  列类型  primary key

        2)创建表的列之后独立指定主键    格式: primary key(列名)

格式:alter table 表名 add primary

key(列名);

        3)修改表指定主键               

ALTER TABLE stu MODIFY id INT PRIMARY KEY;

      e:删除主键约束(注意:只是删除主键约束,不会删除主键列)

        格式:alter table 表名dropprimary key;


    2、主键自增长约束

      a:主键必须是整型才可以自增长。

      b:当主键设置为自动增长后,在没有给出主键值时,主键从1开始,每次自增1。

        当主键设置为自动增长后,在给定主键值后,会在给定值的基础上每次自增1。

      c:指定主键自增长约束的关键字是:auto_increment

      d:主键自增长约束的方式有2种:

        1)创建表的列的同时指定主键自增长  格式:列名 类型 primary key auto_increment;

        2)修改表时设置主键自增长         

格式:alter table 表名change 旧列名 新列名 类型 primary key auto_increment;

        3)删除主键自增长约束:格式:alter table 表名 change 旧列名 新列名 类型;(只是加自增长约束,新列名和旧列名一样就行)

      e:主键自增长设置初始值

         alter table表名auto_increment=初始值;(必须在加入数据前设置)


    3、非空约束

      a:指定非空约束的列不能没有值,否则报错。

      b:非空约束的关键字not null

      c:非空约束的格式: 列名 类型 not null;   

      d:字段默认是可以为空  例如:age int ; 等价于age int null;


    4、唯一约束

      a:字段指定唯一约束后,那么字段的值必须是唯一的。类似于主键约束。

      b:唯一约束的关键字unique

      c:唯一约束多的格式:列名 类型unique;

      d:取消唯一约束: alter

table 表名 drop index 列名; 

         alter table student dropindex sname;


    5、外键约束

      a:主外键是构成表与表关联的唯一途径。

       b:外键是另一张表的主键。

       c:外键约束的格式:constraint 外键名(随便起) foreign key(外键列) references 主键表(主键列 就是参考哪个表的列写哪个);

      d:删除外键约束的格式

        alter table 外键表drop foreignkey  外键名;

      e:查看外键:show create table 表名;


    6、默认值约束(补充)

      a、使用关键字default设置列的默认值

       b、语法格式:                                                   

         列名 类型 default 默认值;

         例如:性别列默认值为男  sex varchar(50) default '男';

                年龄列默认值为20   age int default 20;   


一、掌握order by子句对查询结果排序ASC升序DESC降序 

    1、使用关键字order by 对查询的结果进行排序。

    2、在默认情况下,order by 按升序输出结果。升序(ASC) 降序(DESC)

    3、排序的语法格式:

      select * from  表名order by 字段名  asc/desc;

    4、当排序时字段值相同,可以按照另一个字段排序

      语法格式:

      select * from 表名 order by 字段1  asc/desc,字段2  asc/desc;


二、掌握模糊查询 (like)   like----喜欢,像

   1、使用关键字like实现模糊查询,有两种通配符:% 和 下划线(_)

   2、“%”----可以匹配一个或多个字符,可以代表任意长度的字符串。

     1)查询姓王的学生信息 :select * from 表名 where name like '王%';

     2)查询名字中包含“明”的学生信息: select *

from 表名 where name like '%明%';

   3、“_”----可以匹配一个字符。

     1)查询以m开头,以n结尾的3个字符姓名的学生信息 select * from 表名where name like 'm_n';

      2)查询由5个字母构成的姓名的学生信息      select * from表名  where name like '_____';

   4、练习:

     1)查询姓名由5个字母构成,并且第5个字母为“i”的学生记录 

         select * from表where sname like '____i';

     2)查询姓名以“z”开头的学生记录

        select * from表where sname like 'z%';

     3)查询姓名中第2个字母为“i”的学生记录

        select * from表where sname like '_i%';

     4)查询姓名中包含“a”字母的学生记录  

        select * from表where sname like '%a%;'


一、查询指定字段、查询所有字段以及列运算

    1、查询指定字段:  select字段名1,字段名2 from 表名;

    2、查询所有字段:  select *  from表名;

    3、列运算:

      1)数值类型字段进行算术运算

      2)字符串类型字段可以进行连接运算

      3)null值的字段可以转换成0来计算

      4)给进行运算的字段起别名


二、条件查询练习(范围查询、查询空及非空数据、多条件查询练习)

    1、between  and

    2、is null

    3、is not null

    4、and  or 


三、将查询结果去重

select distinct 字段名 from 表名;


四、对查询结果进行排序

   select * from表名 order by 字段名  asc/desc;


五、单个或多个字符匹配查询(模糊查询)

   like---模糊查询

   “%”----任意字符   “_”-----一个字符

day10(第十天)

聚合函数是用来做纵向运算的函数。


一、count()函数 

    1、功能:统计指定列不为null的记录行数

    2、查询student表中记录数                    selectcount(*)  from student;

      查询student表中sex列不为空的记录行数    select count(sex)  from student;

      查询student表中工资大于10000的人数     select count(*) fromstudent where money>10000;

    3、多列字段同时统计行数

      格式:select count(字段1),count(字段2) from 表名;


二、sum()函数

    1、功能:计算某列的和

    2、计算score列之和 select sum(score) from表名;

    3、计算多列的和格式:

select sum(列1),sum(列2) from 表名;


三、avg()函数

    1、功能:计算某列的平均值

    2、计算score列的平均值  select avg(score) from表名;

    3、平均值保留两位小数

       round(avg(列名),2) -----会进行四舍五入计算


四、max()函数

    1、功能:找出某列中的最大值

    2、语法格式: select max(列名)from 表名;

    3、找出多列中的最大值:select max(列名1),max(列名2) from 表名;


五、min()函数

    1、功能:找出某列中的最小值

    2、语法格式: select min(列名)from 表名;

    3、找出多列中的最小值:select min(列名1),min(列名2) from 表名;


一、灵活运用分组查询group by子句(一个字段中有几种类别,比如男,女等,给分组出现)

    例如:每个公司都有多个部门,如果统计每个部门的在职员工人数,那么就需要分组统计人数...

         分组查询需要使用关键字group by

    语法格式:

    select ... from 表名 group by 列名;

    例如:

    查询每个部门的部门编号和每个部门的人数:

    select id,count(*) from 表名  group by id;

   having用法(补充)

    一、having 用法与WHERE用法类似,但有三点不同

       1、HAVING只用于GROUP BY(分组统计语句),

       2、WHERE 是用于在初始表中筛选查询,HAVING用于在WHERE和GROUP

BY 结果中查询。

       3、HAVING可以使用聚合函数,而WHERE 不能。


      这个是用在聚合函数的用法。当我们在用聚合函数的时候,一般都要用到GROUP BY 先进行分组,然后再进行聚合函数的运算。


     二、HAVING子句----练习

       查询工资总和大于9000的部门编号以及工资和:

SELECT deptno, SUM(sal) FROM emp GROUP BYdeptno  HAVING SUM(sal) > 9000;


二、掌握limit子句

    限制查询结果的数量----limit关键字

    1、查询数据时,可能会查询出很多的记录,而用户需要的记录可能只是很少的一部分,这样就需要来限制查询结果的数量。

      关键字limit可以对查询结果的记录条数进行限定,控制它输出的行数。

    2、显示前3条记录  select * from表名 limit 3;

    3、使用关键字limit还可以查询结果的中间部分取值。

      两个参数,参数1是开始读取的第一条记录的编号(在查询结果中,第一个结果的记录编号是0,而不是1);

          参数2是要查询记录的个数。

      例如:查询出第2条到第4条记录信息  select * from表名 limit 1,3;


一、查询表中满足某一条件的所有数据

   select * from表名where id=3;

    或者:select * from 表名 where name='张三';


二、对查询表中满足某一条件的数据限制查询数量

   select * from表名where score>=80 limit 3;

三、查询表中满足多个条件的所有数据

   select * from表名 where score>=80 and sex='男'and address='河南省';

   select * from表名 where bumen='大数据'or bumen='物联网';


四、对满足条件的数据排序

   select * from表名 where sex='男' order by score;


五、对某一范围内满足条件的数据进行分组

   select id,score,xueyuan from表名where scorebetween 60 and 80 group by xueyuan;

六、对某一范围内满足条件的数据进行去重

   select distinct xueyuan from表名where id between1 and 45;


七、模糊查询的数据限制查询结果的数量

   select * from表名 where name like '王__' limit 3;


一、合并结果集

    1、合并结果集就是把不同表中的记录连到一起,这样查询结果会产生笛卡尔积。

      笛卡尔积:多表连接时,表中记录个数的乘积。

      笛卡尔积中会存在我们不想要的结果,那么怎么去除这些记录呢?用条件过滤不想要的记录。


    2、合并结果集的方法:内连接查询和外连接查询。


二、内连接查询 inner join

    1、内连接是最普通的连接类型,它要求构成连接的表中有等同的字段。

    2、内连接要求构成连接的每一部分的每个表的匹配,不匹配的行将被排除。

    3、语法格式:

  假设两个表中都有等同的字段user

select 字段名 from 表1,表2  where表1.user=表2.user;         ------隐式内连接

或者:select 字段名 from 表1

inner join 表2 on 表1.user=表2.user;  ------显式内连接(效率高)


三、外连接查询  outer join

    1、与内连接不同,外连接是指使用outer join关键字将两个表连接起来。

      外连接生成的结果集不仅包含符合连接条件的行数据,而且还包括左表(左外连接时的表)、右表(右外连接时的表)或两边连接表(全外连接时的表)中所有的数据行

(以及不符合条件的)。

    2、语法格式:

      select 字段名 from 表名1 left|right|full[outer] join表名2 on 表名1.字段名1=表名2.字段名2;

    3、外连接分为左外连接(left

join)、右外连接(right join)和全外连接3种类型。

    4、左外连接:

       左连接是先查询出左表(即以左表为主),然后查询右表,右表中满足条件的显示出来,不满足条件的显示NULL。

    5、右外连接:

       右连接就是先把右表中所有记录都查询出来,然后左表满足条件的显示,不满足显示NULL。


四、合并查询结果 (补充)

1、合并查询结果是将多个select语句的查询结果合并到一起。   

      合并查询结果使用关键字union和union

all。

      1)关键字union是将所有的查询结果合并到一起,然后去除重复记录;

       2)关键字union all则只是简单地将结果合并到一起,不会去除重复记录。


    2、语法格式:

      select 字段 from 表1    union/union all    select字段 from 表2;


一、复合条件连接查询

    1、在连接查询时,也可以增加其他的限制条件。通过多个条件的复合查询,可以使查询结果更加准确。

    2、语法格式:

      select * from表1,表2

where 表1.字段=表2.字段 and 其他条件;---隐式

       select* from表1 inner join 表2 on 表1.字段=表2.字段and 条件;---显式

    3、练习:查询所有具有有效部门并且在2001年后入职的员工的所有信息(两张表)

      select * from表1 a,表2b  where a.depno=b.depno and a.hiredate>'2001';


二、查询指定列

    1、查询指定的字段

    2、练习:查询出所具有有效部门并且员工编号是1008,1011、1014的员工编号,员工姓名,部门编号,部门名称

      select a.id,a.sname,a.depno,b.depname from表1 a,表2 b where a.depno=b.depno and a.depno in(1008,1011,1014);


三、查询指定数据

    1、查询指定符合条件的数据

    2、练习:查询出所具有有效部门并且员工工资高于20000元的员工编号,员工姓名,部门编号,部门名称

      select * from表1 a,表2b  where a.depno=b.depno anda.salary>20000;


查询student表中入职时间是2008年的所有数据

select * from student where hiredatebetween '2008-1-1' and '2008-12-31';

select * from student wherehiredate>='2008-1-1' and hiredate<='2008-12-31';

select * from student where hiredate like '2008%';

select * from student where year(hiredate)=2008;



 1、子查询就是嵌套查询,即select中包含select,如果一条语句中存在两个,或两个以上select,那么就是子查询语句了。

 2、子查询出现的位置:

     1)where后作为条件存在

     2)from后作为表存在(多行多列)


一、带关键字in的子查询

    1、只有子查询返回的结果列包含一个值时,比较运算符才适用。

    2、假如一个子查询返回的结果集是值的列表,这时比较运算符就必须用关键字in代替。

    3、in 运算符可以检测结果集中是否存在某个特定的值,如果检测成功就执行外部的查询。

    4、练习:查询性别和工资与李鹏飞完全相同的员工信息

           select * from 表名 where (sex,salary) in (select

sex,salary from 表名 where sname='李鹏飞');

 

 

二、带比较运算符的子查询    >  >=  <  <=   = !=  <>

    练习1:查询工资高于李鹏飞的员工信息

         select * from 表名 where

salary>(select salary from 表名 where sname='李鹏飞');

    练习2:查询分数大于班级平均分的学生的信息

         select * from

student where score>(select avg(score) from student);

三、带exists的子查询

    1、含有exists的子查询特点:

       含有exists的子查询实际上不产生任何数据

      在有返回行的情况下,子查询将返回true,反之则返回false

      由于仅仅判断是否存在返回行,所以子查询的选择列表通常指定为(*)

    2、练习:

      1)如果student中存在name为张三,则查询表中的所有学生的姓名、性别和年龄

         select

sname,sex,age from student where exists (select * from student where sname='张三');

      2)如果student中不存在name为张三,则查询表中的所有学生的姓名、性别和年龄

         select

sname,sex,age from student where not exists (select * from student where

sname='张三');


一、带any的子查询

    1、关键字any表示满足其中任意一个条件。

    2、使用关键字any时,只要满足内层查询语句返回的结果中的任意一个,就可以通过该条件来执行外层查询语句。

    3、练习:查询工资大于大数据任意一人薪资的员工信息

             select * from 表名  where salary > any(select salary from表名 where sname='大数据');

      等价于:select *

from 表名  wheresalary >(select min(salary) from表名 where sname='大数据');

二、带all的子查询

    1、关键字all表示满足所有条件。

    2、使用关键字all时,只有满足内层查询语句返回的所有结果,才可以执行外层查询语句。

    3、练习:查询工资高于大数据所有人的员工信息

             select * from 表名  where salary > all(select salary from表名 where sname='大数据');

      等价于:select *

from 表名  wheresalary >(select max(salary) from表名 where sname='大数据');


三、合并查询结果

    1、合并查询结果是将多个select语句的查询结果合并到一起。

      合并查询结果使用关键字union和union

all。

      1)关键字union是将所有的查询结果合并到一起,然后去除重复记录;(比较常用)

       2)关键字union all则只是简单地将结果合并到一起,不会去除重复记录。


    2、语法格式:

          select * from 表1    union/union all    select * from表2;

        或 select 字段 from 表1   union/union all    select字段 from 表2;


    3、注意事项:

      合并结果的多个表中字段的数量和类型一致。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 220,295评论 6 512
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 93,928评论 3 396
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 166,682评论 0 357
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 59,209评论 1 295
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 68,237评论 6 397
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,965评论 1 308
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,586评论 3 420
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,487评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 46,016评论 1 319
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 38,136评论 3 340
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 40,271评论 1 352
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,948评论 5 347
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,619评论 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 32,139评论 0 23
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,252评论 1 272
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,598评论 3 375
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 45,267评论 2 358