文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

【Mysql】一篇带你了解数据定义,操作和查询语言

2023-08-31 10:00

关注

目录

数据定义语言DDL(Data Definition Language)

一.对数据库的操作

二.对数据表的操作

数据操作语言DML(Data Manipulation Language)

一.添加 insert into

二.删除  delete

三.修改  update

数据查询语言DQL(Data Query Language)

一.查询 select

二.关键字

1.between ... and ...(在....之间)

2.in, exists

3.check

4.primary key(主键)

5.foreign key(外键)

6.null ,not null

7.distinct

8.having

​9.as

 10.alter命令

11.unique 唯一键(索引一种)

三.排序查询 order by

四.分组查询 group by

五.聚合函数 

六.模糊查询 like

        七.分页查询 limit

 创作不易,如果本篇博客对您有一定的帮助,大家记得留言+点赞哦。  


通过很长一段时间的学习,今天特此总结一下SQL语句,重点是对要用SQL语句实现的句子提供多种不同的语句,以及SQL语句中的一些语法规则,希望对你有帮助!!

数据定义语言DDL(Data Definition Language)

一.对数据库的操作

--1.1创建数据库create database MyDatabase;--1.2判断数据库是否已经存在,若存在则不创建,不存在创建,语句更为严谨create database if not exists MyDatabase ;--2.查看所有创建的数据库show databases;--3.查看指定数据库的定义信息show create database MyDatabase;--4删除数据库drop database MyDatabase;

二.对数据表的操作

由于在创建表时,会用到数据类型,恰当的使用数据类型,可以节省内存,加快运行速度。最大程度利用内存空间。

而在SQL中,也定义了许多数据类型。下面是我整理的经常会用到的数据类型,供大家参考。

数据类型
    数据类型   数据内容         范围    占用字节                       适用场景
         int  精确数值型-2^31-- 2^31-1          4                            略
      tinyint

  精确数值型

     0-255          1                            略

       date

  日期时间型

1000/1/1~

9999/12/31

          3适用于只显示日期,不显示时间的需求。如出生时期等显然date更适合。
    datetime  日期时间型1753/1/1~9999/12/31          8可以精确到秒,与下面的smalldatetime的范围比较,显然datetime更适合用
smalldatetime  日期时间型1900/1/1~2079/6/6          4                 可以精确到秒

       char

     字符型1-8000个字符

定长。1个字符占1个字节

如定长的数字或英文如学号身份证号
     varchar     字符型1-8000个字符不定长。1个字节占1个字符如不定长的数字或英文数据
      nchar Unicode字符型1-4000个字符定长。1个字符占2个字节汉字长短一样的性别只有男和女
    nvarchar Unicode字符型1-4000个字符不定长。1个字符占2个字节汉字长短不一的姓名,专业等
--1.创建数据表create table Student(SNO char(10) not null primary key,     --[primary key] 为设置主键[Name] nvarchar(20) not null,     -- [not null] 为属性列的值不能为空Sex int,  --年龄    gender nchar(1) check(gender = '男' or gender = '女'),--[check] 起限制,约束作用,例如性     --or  gender char(2)               --别男和女,分数0到100分 birthday date,  --出生年月日Major nvarchar(20),  --专业Dept nvarchar(20),  --院系Number char(10))   --电话--2.查看表的结构desc 表名;desc Student; --例子--3.修改表名alter table 表名 rename to 新的表名;alter table Student rename to S;  --例子--4.添加一列alter table 表名 add 列名 数据的类型; --(注意,此处所添加的列属性是默认可以为空值的null)alter table Student add address nvarchar(50); --例子 添加住址--5.添加多列alter table 表名 add 列名 数据的类型,                     列名 数据的类型, 列名 数据的类型;--6.删除一列alter table 表名 drop 列名;alter table Student drop Dpet; --例子--7.删除多列alter table 表名 drop 列名,                      列名,  列名,  列名;----8.删除表drop table 表名;drop table Student; --例子--9.判断表是否已经存在,若存在才删除,语句更为严谨drop table  if exists 表名;drop table  if exists Student; --例子

数据操作语言DML(Data Manipulation Language)

一.添加 insert into

--例子insert into(SNO,Name,Sex,gender,birthday,Major,Dept,Number)values('2020041235','张璇',20,'男','2000-1-20','自动化','电信院','7777445222'),      ('2020041236','田慧',21,'女','2001-32-10','计算机科学与技术','计科院','7777445223'),      ('2020041237','田琪',20,'男','2002-5-10','通信工程','电信院','7777445224'); --1.规范书写insert into 表名(列名1,列名2,...) values(值1,值2,,...);--2.省略列名时,默认所有列都添加,下面两个句子表达意思相同insert into 表名 values(值1,值2,,...,值n);--省略列名insert into 表名(列名1,列名2,...,列名n) values(值1,值2,,...,值n);--此为写全了所有列名--3.插入部分数据时insert into 表名(列名2,列名3,,列明5) values(值2,值3,值5);--4.插入多行数据时 两种写法 注意标点符号 明显第二种较为简单insert into 表名()values();                  values();  values();insert into 表名()values(),                        (),(),();

二.删除  delete

--1.规范书写--delete 作用仅是删除表中的数据,对表体,列属性名无任何影响delete from 表名 where 列名 = 值;delete from Student where SNO = '2020041599'; --删除一行或多行数据--2.删除表中所有数据 这里表体仍存在,是空表,表仍能查询到delete from 表名 ;  --如果不是想删除所有数据,切记加where,不然表中数据全删除完了,小编就吃过亏,慎用 --3.先删除表,再创建一张一样的表truncate table 表名;

三.修改  update

--规范书写update 表名 set 列名 = 值 where 列名 = 值;--代码中第一个【列名 = 值】 为想要修改的所在列的值--代码中第二个【列名 = 值】 的列名为具有标识的作用如主键,其值唯一。非主键也行,看具体修改的目的--例子update Student set Major = '软件工程' where SNO = '2020041158';--即更改学号为2020041158的学生的专业名称。

数据查询语言DQL(Data Query Language)

一.查询 select

--查询表中所有数据 (行列无限制,全部输出)select * from 表名;select * from Student; --例子--查询表中某几列数据(行全部输出)select 列名1,列名3 from 表名;select SNO,Name,Major from Student; --例子--查询特定列名的几行数据 (列全部输出)select * from 表名 where 列名 = 值;select * from Student where SNO = '2020041599';--即查询学号为2020041599的学生的全部信息--查询特定列名的几行数据 (行列都有限制)select 列名2,列名4 from 表名 where 列名 = 值;

二.关键字

1.between ... and ...(在....之间)

between 值 and 值:寻找在…之间的值。
not between 值and值:寻找不再…之间的值。这些值可以是数值、文本或者日期。

--查询年龄大于等于18,小于等于20的学生(三种写法,结果一样)SELECT * FROM student WHERE Age>=20 AND Age<=30;SELECT * FROM student WHERE Age<=20 && Age<=30;SELECT * FROM student WHERE BETWEEN 20 AND 30;--查询年龄不在18到20的学生(三种写法)SELECT * FROM student WHERE Age<20 AND Age>30;SELECT * FROM student WHERE Age<20 && Age>30;SELECT * FROM student WHERE NOT BETWEEN 20 AND 30;

2.in, exists

in在查询的时候,首先查询子查询的表,然后将内表和外表做一个笛卡尔积
然后按照条件进行筛选。in(集合)。

exists在查询的时候,首先会执行外循环,外循环返回的结果每一行都会拿着去内层循环执行(此时注意,内层也是循环查询的)。

-查询选修了课程的学生全部信息  S(学生表)  SC(学生选课表)SELECT *FROM SWHERE SNO IN(SELECT SNO             FROM SC)SELECT * FROM SWHERE EXISTS(SELECT SNO                FROM SC  WHERE S.SNO = SC.SNO)--查询没有选修任何课程的学生全部信息  S(学生表)  SC(学生选课表)SELECT * FROM SWHERE SNO NOT IN(SELECT SNO                 FROM SC WHERE S.SNO = SC.SNO)SELECT *FROM SWHERE NOT EXISTS(SELECT SNO                 FROM SC WHERE S.SNO = SC.SNO)-- 查询年龄40岁,35岁,44岁的信息SELECT * FROM Student WHERE age = 40 OR age = 35 OR age = 44SELECT * FROM Student WHERE age IN (40,35,44);

3.check

CHECK 约束:用于限制列中的值的范围

在一些情况下,我们需要字段在指定范围的输入,
例如:性别只能输入 '男'或者'女',余额只能大于0,分数在0到100分之间。
这时候就可以用 CHECK 约束 来规范数据。

接下来我们来看看它都可以在哪用。 

1.创建表的时候

8762f730abd54bcfa16adf0c05958c11.png

2.表已经存在的时候,还想修改时。

f9f543d3a6de4c8c897cb1b9229950e6.png

4.primary key(主键)

primary key(主键),

用于唯一标识表中的每一条数据。

不能重复, 不能为空。

一个表只能有一个主键。

接下来我们来看看它都可以在哪用。

1.创建表的时候

第一种

b384d4e22c634b718a051a32b278afbb.png

第二种

0ae6fd0ed0f342f395240e2453cad8e6.png

2.表已经存在且无主键,想要添加主键时

1af97cdf66804a1b992001ec0ba1d229.png

3.表已经存在且有主键,想要删除主键时

42073616508e4e408694d67c95f7e9cc.png

上面代码中的约束名在这里,右键点击复制即可

3e8dbf6229a843949b5ba4d576d4c873.png

5.foreign key(外键)

外键: 外面的键, 一张表的一个字段(非主键)指向另外一个表的主键, 那么该字段就称之为外键.

外键所在的表称之为子表(附表); 外键所指向的主键所在的表称之为父表(主表)。

1.创建表的时候

 a57a5dd79aaa41cd8f70559ea0c364c9.png

2.表已经存在,想要添加外键时

注意:主从表的字段要具备  相同的数据类型,字符长度和约束  哦!!!

e2ce10f6776b4aee817c8e4f6c89f5ba.png

3.表已经存在,想要删除外键时

删除外键和前面的删除主键是一样的

11257bac3a6848f590a30f3ec0cc5ee2.png

6.null ,not null

  null not null 可以称为数据类型的属性,可以修饰限制列属性,null值也不等同于空值,空值是不占用存储空间的,null占用存储空间。

is null is not null 是运算符,(注意不能写成 =null 或 !=null)查询某字段为空时用 is null,

不为空时用 is not  null。

接下来我们来看看它都可以在哪用。

创建表时修饰限制列属性。

create table Student(SNO char(10) not null primary key,    [Name] nvarchar(20) not null,     Sex int null,    gender nchar(1) check(gender = '男' or gender = '女'),birthday date null,Major nvarchar(20) null,  Dept nvarchar(20) null,  Number char(10) null)  

查询某字段为不为空时。

-- 查询高数成绩不为nullSELECT * FROM Student WHERE Math IS NOT NULL;--查询没有选高数课的学生信息SELECT * FROM Student WHERE Math IS NULL; 

7.distinct

distinct 去重,distinct关键字的主要作用就是对数据库表中一个或者多个字段重复的数据进行过滤,只返回其中的一条数据给用户,distinct只可以在select中使用。

举例说明。当查询全校同学的姓名时。

--不加select Name from Student;--加distinctselect distinct Name from Student;

查询结果。

8.having

having的作用是过滤数据,where也是过滤数据。那么他们有什么区别呢?

1.having与 where的区别。

(1).执行时机不同。where是分组之前进行过滤,不满足where条件,不参与分组;而having是分组之后对结果进行过滤。

(2).判断条件不同。where不能对聚合函数进行判断,而having可以。

即where并不参与分组后的过滤数据。而是在分组前执行,且必须在分组前执行。 

2.使用要求

        (1) 如果过滤条件中使用了聚合函数,则必须使用having来替换where,否则会报错。

        (2) having必须使用在group by的后面。

        (3) having不能单独使用,要和group by一起使用。

3.执行顺序

   where > 聚合函数  > having 

   分组之后,查询的字段一般为聚合函数和分组字段,查询其他字段无任何意义。

​9.as

作用:起别名。

select 字段 as 别名 from 表名select SNO as 学号 from Student

 10.alter命令

当需要修改数据表名或者数据表字段时,就需要用到ALTER命令。

--1. 删除列alter table 表名 drop 列名;--2.增加列alter table 表名 add 列名 + 列名数据类型 + 约束;--3.修改列的类型信息alter table 表名 change 列名 + 新列名(这里可以用和原来列同名即可) + 列名数据类型 + 约束;--4.重命名列alter table 表名 change 列名 新列名 + 列名数据类型 + 约束;--5.重命名表alter table 表名 rename 表新名;--6.删除表中主键alter table 表名 drop primary key;--7.添加主键alter table sj_resource_charges ADD CONSTRAINT PK_SJ_RESOURCE_CHARGES PRIMARY KEY (resid,resfromid)--8.添加索引alter table sj_resource_charges add index INDEX_NAME (name);--9.添加唯一限制条件索引alter table sj_resource_charges add unique emp_name2(cardnumber);--10.删除索引alter table tablename drop index emp_name;

11.unique 唯一键(索引一种

唯一键:unique key,是用来保证对应的字段中的数据是唯一的。

虽然主键也可以用来保证字段数据唯一性,但是一张表只有一个主键。

唯一键在一张表中可以有多个。

唯一键允许字段数据为NULL,NULL可以有多个(NULL不参与比较)

创建唯一键的几种方式

直接在表字段之后增加唯一键标识符:unique 

在所有的字段之后使用unique key(字段列表);

在创建完表之后也可以增加唯一键
alter table 表名 add unique key(字段列表);

这里不再做过多演示,可以去上机敲一下。

三.排序查询 order by

order by 用于排序,默认是按照升序排序。

注意:    如果有多个排序条件,则当前边的条件值一样时,才会判断第二条件。

order by 列名 desc --[desc] 表示降序order by 列名 asc  --[asc] 表示升序order by 列名1 asc 列名2 desc--查找所有学生的全部信息,按年龄降序排列select *from Sorder by Age desc

四.分组查询 group by

用法:用于分组,一般用于与聚合函数进行分组聚合(求和、统计等)。

--按照年龄分组并计算每个年龄段的平均成绩SELECT Age, AVG(Score) FROM studentsGROUP BY Age;--按照性别和年龄分组并计算每个年龄段不同性别的平均成绩SELECT Gender, Age, AVG(Score)FROM studentsGROUP BY Gender, Age;--按照性别分组。分别查询男、女同学的平均分,人数 要求:分数低于70分的人,不参与分组SELECT sex , AVG(math),COUNT(id) FROM student WHERE math > 70 GROUP BY sex; --按照性别分组。分别查询男、女同学的平均分,人数 要求:分数低于70分的人,不参与分组,分组之后。人数要大于2个人SELECT sex , AVG(math),COUNT(id) FROM student WHERE math > 70 GROUP BY sex HAVING COUNT(id) > 2;SELECT sex , AVG(math),COUNT(id) 人数 FROM student WHERE math > 70 GROUP BY sex HAVING 人数 > 2;

五.聚合函数 

将一列数据作为一个整体进行计算,通常和分组查询函数group by组合使用。

count() 计算列数
2.max()  计算列最大值
3.min()  计算列最小值
4.sum()  对列进行求和
5.avg()  对列计算平均数

六.模糊查询 like

like模糊查询,使用 % 和下划线 _ 匹配,

%可表示多个字符;

下划线_:一个下划线表示一个字符。

示例:

--1、查询名字中含有思的学生信息select * from student where sname like ‘%思%’;--2、查询名字以刘开头的学生信息select * from student where sname like ‘刘%’;--3、查询名字以玮结尾的学生信息select * from student where sname like ‘%玮’;--4、查询名字中第二个字为雨的学生信息select * from student where sname like ‘_雨%’;--5、查询名字中第三个字为思的学生信息select * from student where sname like ‘__思%’;

七.分页查询 limit

 1. 语法SELECT * FROM 表名 LIMIT 起始索引,查询记录数;
 2. 注意:起始索引从0开始,起始索引=(查询页码-1)*每页显示记录数。

               分页查询是数据库的方言,不通风的数据库有不同的实现,Mysql中是limit。

               如果查询的是第一页数据,起始索引可以省略,直接简写为limit 10。

--规范书写SELECT * FROM 表名 LIMIT 起始索引,查询记录数;-- 每页显示3条记录  SELECT * FROM student LIMIT 0,3; -- 第1页 SELECT * FROM student LIMIT 3,3; -- 第2页 SELECT * FROM student LIMIT 6,3; -- 第3页

 创作不易,如果本篇博客对您有一定的帮助,大家记得留言+点赞哦。  

来源地址:https://blog.csdn.net/m0_73381672/article/details/131483591

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     807人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     351人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     314人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     433人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     221人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-数据库
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯