数据库及SQL语句

1.DB的概念

2.完整性的分类

3.满足完整性的数据特点

4.完整性的分类

5.约束条件

6.数据库的分类

7.数据库管理提供的功能

8.DBMS(数据库管理)具备的内容

9.数据模型

10.SQL语言简介

11.命名规则

12.sql的数据类型

13.常用的数据类型

14.sql常用命令 1.对数据库的操作 2.对表的操作 3.单表操作 4.多表操作

对语句的总结

                         使用数据库  :    use 数据库名;

                         设置别名     :    select 字段名1 [as] 别名1,字段名2,别名2 from 表名 [as] 别名

                         查询语句     :    select....from 表名

                         添加语句     :    insert into 表名 values(字段名1=值1,字段名2=值2)

                         修改语句     :    update 表名 set 字段名1=值1,字段名2=值2    where 条件

                         删除语句     :    drop database 数据库名;            drop table 表名;

                                                   delete   from  表名 where 条件        (删除一条记录)

 

 

1. 数据库  database  DB

            概念:一个存储数据的仓库。数据库里可以存放文字,图片,音频,视频等信息。

                        数据库存储完毕之后形成一个文件,存储在硬盘中。

                         .db .sql 文件等

                         数据库的存储也称之为 持久化存储   data persistence

            Navicat中可以转储文件,也可以执行文件,后缀名sql(对数据库文件导入导出)

 

2.完整性  

          确保db中包含的数据尽可能的准确和一致的数据特性。

          如果db中存储有不正确的数据值,则该db就丧失了数据的完整性,比如student表中有birthday字段名(date类型),

          则该字段存储的值必须为date的值,不能存储其他类型的值。

  

3.满足数据完整性的数据的特点

         3.1 数据的值正确无误

         3.2 数据的存在必须确保统一表格数据之间的和谐统一

         3.3 必须维护不同表格之间的数据的和谐统一

        为了维护数据的完整性,防止不合法的数据录入到表中,DBA和开发人员可以定义完整性规则,限制表的数据。

 

4.数据完整性的分类

         1 域完整性

         2 实体完整性

         3 参照完整性

 

 

5.实现完整性,需要约束

            约束 constraint

         5.1 非空约束  not null    例如一个表的序号

         5.2 唯一unique约束  不重复  字段中的值不能重复   例如:一个表 的序号

         5.3 默认值default约束    例如字段表示时间,即可以给定一个默认值

        5.4 检查check约束(mysql不支持)

        5.5 主键primary key约束:  非空唯一   一个表必须有一个主键,一般主键使用id。

        5.6 外键foreign key 约束 : 保持关联表的完整性。一个表的主键在另外一个表中存在。

                    举例:student表中有id(主键)    name        age    c_id;

                               course表中有c_id(主键)            c_name

                 对student表来说,c_id不是它的主键,却是course表的主键,这两个表连接起来

 

6. 数据库管理系统及数据库分类

                  DBMS  Database Management System

                  2.1 关系型数据库

                  2.2 非关系型   No-SQL  

                  MongoDB  Redis

                  No-SQL 数据库一般情况下用于做缓存。

           

 

7.数据库管理 提供一些功能

        7.1 管理数据库的表

                    创建db(database)中表 table,和excel表格一样的结构。

        7.2 管理数据库中的数据   

                   Create      创建  增加

                   Read         读取  查询

                   Update     修改  更新

                   Delete       删除

        7.3 数据的完整性

        7.4 数据的安全性

        7.5 有数据故障恢复的功能,保证数据库的可靠运行

 

8. 真正的DBMS,需要包含

        (1) DB  数据库

        (2) DBA 数据库管理员

        (3) Developer 开发者  工程师  程序员

        (4) User  用户

 

9. 数据模型

              (1)对象模型  :把对象抽离出数据库中对应的表名。比如 用户------>db中 User表

              (2)层次模型  :郑大学校有计算机学院    物理学院   数学院,每个学院下面又有多种专业   

              (3)网状模型

              (4)关系模型   : 可用ER图表示

                                              以行和列的表格形式呈现出来,这样的模型称之为关系模型

                                              每一行  称为一个记录

                                              每一列 称为一个字段

                                              每个字段的标题称为字段名

 

            目前市面上流行的大多为关系模型进行数据组织和管理,操作起来比较简洁,直观。

            采用关系模型的称为关系型数据库,比如mysql,oracle,sql server,db2等。

 

10. SQL

         最新mysql的版本是5.8 ,也称为Mysql8

         操作关系型数据库,需要使用标准的语言,称之为SQL(Structure Query Language 结构化查询语言)。

         SQL语言功能分4部分:

                    1 数据查询  select

                    2 数据的操纵 insert/update/delete

                    3 数据的定义 create/alter/drop

                   4 数据的控制  grant/revoke

 

11 Mysql 的命名规则

              针对数据库、表、索引、字段

            规则如下:

                            1 由服务器所采用的字符集中任意的字母、数字、_和 $ 组成。

                            2 可以数字开头,但是不能只有个数字组成。

                            3 数据库、表、字段最多可右64个字符组成。别名最多可长达256个字符。

 

12 Mysql的数据类型                

                 四种:

                         1 数值型                : 处理十进制的数据,可以处理十六进制的数据

                         2 字符型                : 保存字符串  char  varchar(可不字符串)

                         3 日期和时间类型 : 诸如2019-8-1  或 16:02:15

                         4  NULL                  : 空   无类型的值

 

13 Mysql中常用的数据类型:

        数据类型                              描述                                   字节                                                   推荐使用

    1.smallint            整数:从-32000到32000范围                          2                                    存储相对较小的整数  如:年纪,数量

    2.int                   整数:从-20 0000 0000到20 0000 0000           4                                     存储中等整数              如:距离

    3.bigint               整数:不能用smallint或int描述的超大整数        8                                     存储超大的整数          如:科学/数学数据

    4.float                 小数: 单精度浮点型数据                               4                                     存储小数数据              如:测量,温度

    5.double              小数:双精度浮点型小数                                8                                     需要双精度存储的小数     如:科学数据

    6.decimal            小数:用户自定义精度的浮点型小数           变量:取决于精度和长度          以特别高的精度存储小数数据

    7.char                固定长度的字符串                                          最高255字符                     存储包含预定义字符串的变量 如:定期航线,国家或邮编

    8.varchar            具有最大限制的可变长度的字符串变量         高达255字符存储                   高达一个特定最大限度 如:名字,密码,短文标签

    9.text                  没有最大长度限制的可变长度的字符串                                                    存储大型文本数据            如:新闻故事 产品描述 小说

    10.blob               二进制字符串                                                                                         存储二进制数据        如:图片,附件,二进制文档

    11.date              以yyyy-mm-dd格式的日期                                    3                                   存储日期        如:生日,产品满期

    12.time              以hh:mm:ss格式的时间                                     3             存储时间或时间间隔  如:两时间之间的间隔,任务开始/结束时间

    13.datetime      以yyyy-mm-ddhh:mm:ss格式结合日期和时间        8            存储包含日期和时间的数据   如:提醒的人,事件

     

 

      

 

14.SQL语句

                   (1) 对数据库的操作:

                    1 展示所有的数据库

                                         show databases;

 

                    2 创建一个数据库

                                         create database [if not exists] 数据库名;

                                          如果不存在这个数据库就创建,如果存在就不再进行创建

 

                     3 展示数据库中所有的table

                                          首先使用这个数据库:use 数据库名;

                                           其次                           :show tables;

 

                    4 删除数据库

                                         drop database 数据库名;

 

                    5 退出数据库

                                        exit

 

                   (2) 对表的操作:

                    1 创建表    create table 表名();

                       create table 表名(

                             列名1  数据类型 [约束],

                             列名2  数据类型 [约束],

                             ...

                             列名n  数据类型 [约束]

                       );

 

                    2 添加数据

                            (1)insert into 表名  values(各字段对应的值);

                            (2) Insert into 表名(字段名1,字段名2)  values(字段对应的值1,值2);

 

                     3 查看表中的数据

                            3.1查询表中所有的数据

                                (1)select id,name,age  from  表名;

                                (2)select * from 表名;(不建议使用,效率最低)

                            3.2查询某些字段的数据

                                    select   id,name     from   表名;

                                    select 字段(如name)    from  表名  where  条件(如id=1); 

 

                    4 可以设置别名

                                     Select 字段名1 [as] 别名1,字段名2 [as] 别名2,.... from 表名 [as] 别名;

                                      注意:可省略as,表名也可以设置别名。

 

                    5 修改

                              update 表名 set 字段名1=值1,字段名2=值2 ....;

 

                     6 修改某一记录的数据

                           update    name='zhangsan'  Where id=1(条件:也可以是大于小于);

                 注意:一般情况下,where后面的条件常使用id,因为在表id字段是不重复(唯一),当然了,在创建表时,需要对id加约束。

 

                    7 删除一条记录

                          delete from 表名   where 条件

 

                   (3)单表操作

                    8   查询年龄为18

                           select * from student where age = 18;

 

                    9    查询年龄大于18

                            select * from student where age > 18;

 

                  10    查询年龄在18和23之间的(and between...and)

                             select * from student where age>18 and age<23;

                             select * from student where age between 18 and 23;

 

                   11    查询年龄为20和25的(or)

                            select * from student where age=20 or age=25;

 

                  12    查询年龄在20和25之间的(in):包括20和25

                            select * from student where age in(20,25);

 

                13    模糊查询(like,not like)

                           select * from 表名    where  name like''

                        %:匹配0到多个字符(如:'l%':以l开头的名字)

                        _ :匹配一个字符       (如:'_l':匹配第二个字符是l的名字)

                        注:一个汉字占两个字符

 

                  14    聚合函数

                         1.count(字段名/列名)  统计

                         select count(id) from student;            结果是以表格形式出现。有一列,第一行为列名 为count(id),第二行是表中的id数量

                         2.sum()     求和

                         3.max()    min()

                                使用嵌套查询,首先统计出年龄的最大数,再查询年龄最大的学生信息

                                select * from student where age = (select max(age) from student);           

                        4.avg()

                                  select avg(age) from student;

 

                    (4)多表操作               

                        有两个表:student表中的c_id与course表中的c_id关联,设置student中的c_id为其外键(可在Navicat中设置)

                                           student(学生信息表):    s_id (Primary Key)        name                    age        c_id

                                                                                                    1                  zhangsan                 18           1

                                                                                                    2                      lisi                          20           2

                                                                                                     3                  wangwu                   21           1

                                                                                                     4                     mazi                       22           3

 

                                            course (课程表)    :      c_id(Primary Key)    c_name

                                                                                                        1                     java

                                                                                                        2                    mysql

                                                                                                        3                      html

                                                                                                        4                       jsp

                              15. 查询选择java课程的学生有多少个

                                            select  count(s_id)    from    student    where    c_id=1;

 

                              16.查询每个课程都有多少学生选择(分组查询:group by)

                                        按照课程号进行分组(不同的c_id为一组)(过滤掉重复的课程号),统计每个组中的数量

                                        按课程号进行分组,统计这个课程号在表中出现的次数                                      

                                        select c_id,count(s_id) from student group by c_id;

                                       意思:对c_id进行分组,过滤掉重复的c_id(过滤掉c_id这一列中重复的),统计出这一列中出现各个课程号的次数count(c_id)

 

                              17.查询选择某一个课程的人数大于1的 信息(课程编号和学生人数)(数量统计:having)

                                             由于WHERE后不可跟COUNT()函数,故用HAVING语句来限定条件

                                            对聚合函数的输出进行限制                                            

                                             select c_id,count(s_id) from student group by c_id having count(s_id)>1;

 

                             18.排序:查询所有学生信息,并按照年龄排序 (asc升序/desc降序)   (Order by排序)

                                              select * from student order by age asc; 

 

                             19.分页:将两条信息作为一页(limit)

                                              查询前两条信息学生信息 作为一页显示。

                                       limit a,b;        a:从第几条记录开始(包含这一条。默认第一条为0)        b:每次查询几个(几条记录)(每页显示的条数)

                                                select * from student limit 0,2;    

                                                select * from student limit 2,2;

 

                            20.查询所有学生信息

                                              1.全连接,查询到的结果是一个笛卡尔积

                                                select * from student,course;

                                                结果:student表中4个s_id都要与course中的4个c_id分别匹配。

 

                                              2.等值连接

                                                  select * from student,course where student.c_id = course.c_id;

                                                   select * from student s,course c where s.c_id=c.c_id;       (设置表的别名)  

 

                                              3.左连接(left join 表名 on)

                                                查询出左表的所有信息和右表里面符号条件的信息

                                                select * from student s left join course c on s.c_id=c.c_id; 

 

                                              4.右连接(right join 表名 on)

                                  根据右表中的数据显示:如course表中有4个c_id,而student表中只用到3个,因为是右连接,所以要把右表中的数据都显示出来。

                                   最后一行中的student数据为null即可。                                                                

                                   查询出左表的所有信息和右表里面符号条件的信息

                                  select * from student s left join course c on s.c_id=c.c_id; 

优先级:

            对于一个很长的查询sql:

            select */字段名 [as] 别名 ,...

            from 表名 [as] 别名

            [where 条件]

            [group by 字段名]

            [having 条件]

            [order by asc/desc]

            [limit ?,?];

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值