2021-08-12笔记

本文详细介绍了SQL的概述、分类及其主要操作,包括DDL(数据定义)、DML(数据操作)、DCL(数据控制)和DQL(数据查询)。重点讲解了如何创建、查询、修改和删除数据库与数据表,以及数据的插入、更新和删除操作。此外,还涵盖了模糊查询、聚合函数、分组查询和LIMIT的使用,帮助读者全面理解SQL的基础知识。
摘要由CSDN通过智能技术生成

3. SQL概述

SQL :Structure Query Language。(结构化查询语⾔)SQL被美国国家标准局 (ANSI)确定为关系型数据库语⾔的美国标准,后来被国际化标准组织(ISO)采纳 为关系数据库语⾔的国际标准。 各数据库⼚商都⽀持ISO的SQL标准。

各数据库⼚商在标准的基础上做了⾃⼰的扩展。

4. SQL的分类

DDL(Data Definition Language):数据定义语⾔,⽤来定义数据库对象:库、表、列等;

DML(Data Manipulation Language):数据操作语⾔,⽤来定义数据库记录(数据);

DCL(Data Control Language):数据控制语⾔,⽤来定义访问权限和安全级别;

DQL(重要)(Data Query Language):数据查询语⾔,⽤来查询记录(数据)。 注 意:sql语句以;结尾

5. SQL详情

5.1 DDL操作

5.1.1 操作数据库

定义:操作数据库、表、列等 使⽤的关键字:CREATE、 ALTER、 DROP

  • 创建

Create database mydb1;
Create database mydb2 character set gbk;
Create database mydb3 character set gbk COLLATE gbk_chinese_ci; 
  • 查询

查看当前数据库服务器中的所有数据库
Show databases;
​
查看前⾯创建的mydb2数据库的定义信息
Show create database mydb2;
​
删除前⾯创建的mydb3数据库
Drop database mydb3;
  • 修改

    查看服务器中的数据库,并把mydb2的字符集修改为utf8;

alter database mydb2 character set utf8;
  • 删除

Drop database mydb3;
  • 其他

查看当前使⽤的数据库

Select database();

切换数据库

Use mydb2;

5.5.2 操作数据表

  • 语法

create table 表名(
 字段1 字段类型,
 字段2 字段类型,
 ...
 字段n 字段类型
); 
  • 常用数据类型

int:整型
double:浮点型,例如double(5,2)表示最多5位,其中必须有2位⼩数,即最⼤值为
999.99;
char:固定⻓度字符串类型;
char(10): 'aaa ' 占10位
varchar:可变⻓度字符串类型;
varchar(10): 'aaa' 占3为
text:字符串类型;
blob:字节类型;
date:⽇期类型,格式为:yyyy-MM-dd;
time:时间类型,格式为:hh:mm:ss
timestamp:时间戳类型 yyyy-MM-dd hh:mm:ss 会⾃动赋值
datetime:⽇期时间类型 yyyy-MM-dd hh:mm:ss
boolean:mysql不⽀持,oracle⽀持
  • 常用操作

查看当前数据库中的所有表
SHOW TABLES;

查看表的字段信息
DESC employee;

在上⾯员⼯表的基本上增加⼀个image列。
ALTER TABLE employee ADD image blob;

修改job列,使其⻓度为60。
ALTER TABLE employee MODIFY job varchar(60);

删除image列,⼀次只能删⼀列。
ALTER TABLE employee DROP image;

表名改为user。
RENAME TABLE employee TO user;

查看表格的创建细节
SHOW CREATE TABLE user;

修改表的字符集为gbk
ALTER TABLE user CHARACTER SET gbk;

列名name修改为username
ALTER TABLE user CHANGE name username varchar(100);

备份表结构和表数据
create table tname2 as select * from tname1;

备份表结构
create table tname2 like tname1;

删除表
DROP TABLE user ;

5.2 DML操作

DML是对表中的数据进⾏增、删、改的操作。不要与DDL混淆了。

INSERT 、UPDATE、 DELETE ⼩知识:在mysql中,字符串类型和⽇期类型都要⽤ 单引号括起来。空值:null

5.2.1插入操作

  • 语法:

INSERT INTO 表名(列名1,列名2 ...)VALUES(列值1,列值2...);注意:列名与列值 的类型、个数、顺序要⼀⼀对应。

可以把列名当做java中的形参,把列值当做实参。值不要超出列定义的⻓度。如果插 ⼊空值,请使⽤null插⼊的⽇期和字符⼀样,都使⽤单引号括起来。

  • 小知识

查看数据库编码的具体信息Show variables like 'character%';

临时更改客户端和服务器结果集的编码
Set character_set_client=gbk;
Set character_set_results=gbk;

第⼆种插⼊数据的⽅法 insert into 新表 select 列 from 已有表

create table emp1(
 id int,
 name varchar(100),
 gender varchar(10),
 birthday date,
 salary float(10,2),
 entry_date date,
 resume text
);
INSERT INTO emp1 select * from emp 将emp表的所有数据复制到emp1中
  • 注意

  1. mysql不⽀持select into

  1. 在复制时是按照列的顺序依次进⾏

  1. 新表的列与原来表的列的名字,类型都可以不⼀样,照样复制成功.但是会出现数据转 换错误.具体的:名字不⼀样,问题不⼤.类型不⼀样,出现错误,⽐如将int型的数据强制转 换成varchar型,会显示0,反之亦然

5.2.2修改操作

语法

UPDATE 表名 SET 列名1=列值1,列名2=列值2 。。。 WHERE 列名=值

5.2.3删除操作

  • 语法

DELETE FROM 表名 【WHERE 列名=值】

  • truncate和delete的区别

DELETE 删除表中的数据,表结构还在;删除后的数据可以找回 TRUNCATE 删除是把 表直接DROP掉,然后再创建⼀个同样的新表。 Truncate删除的数据不能找回。执⾏ 速度⽐DELETE快。

5.3 DQL操作

数据库执⾏DQL语句不会对数据进⾏改变,⽽是让数据库发送结果集给客户端。查询 返回的结果集是⼀张虚拟表

  • 语法

SELECT 列名 FROM 表名

【WHERE --> GOUP BY -->HAVING--> ORDER BY LIMIT】

语法子句说明:

SELECT selection_list /要查询的列名称/

FROM table_list /要查询的表名称/

WHERE condition /⾏条件/

GROUP BY grouping_columns /对结果分组/

HAVING condition /分组后的⾏条件/

ORDER BY sorting_columns /对结果排序/

LIMIT offset_start, row_count /结果限定/

5.3.1 基础查询

1.查询所有列

SELECT * FROM stu;

2.查询指定列

SELECT sid, sname, age FROM stu;

5.3.2 条件查询

语法

条件查询介绍 条件查询就是在查询时给出WHERE⼦句,在WHERE⼦句中可以使⽤如下运算符及关 键字:

=、!=、<>、<、<=、>、>=;BETWEEN…AND;IN(set);IS NULL; AND;OR; NOT,XOR (逻辑异或);

5.3.3 模糊查询

语法

当想查询姓名中包含a字⺟的学⽣时就需要使⽤模糊查询了。模糊查询需要使⽤关键 字LIKE。

通配符:

_ 任意⼀个字⺟ %:任意0~n个字⺟ '张%'

5.4 聚合函数

sum avg max min count

聚合函数是⽤来做纵向运算的函数:

COUNT():统计指定列不为NULL的记录⾏数;

MAX():计算指定列的最⼤值,如果指定列是字符串类型,那么使⽤字符串排序运 算;

MIN():计算指定列的最⼩值,如果指定列是字符串类型,那么使⽤字符串排序运 算;

SUM():计算指定列的数值和,如果指定列类型不是数值类型,那么计算结果为0;

AVG():计算指定列的平均值,如果指定列类型不是数值类型,那么计算结果为0;

5.5 分组查询

当需要分组查询时需要使⽤GROUP BY⼦句,例如查询每个部⻔的⼯资和,这说明要 使⽤部⻔来分组。

注:凡和聚合函数同时出现的列名,则⼀定要写在group by 之后

having与where的区别

1.having是在分组后对数据进⾏过滤.
 where是在分组前对数据进⾏过滤
 
2.having后⾯可以使⽤分组函数(统计函数)
 where后⾯不可以使⽤分组函数。
 
WHERE是对分组前记录的条件,如果某⾏记录没有满⾜WHERE⼦句的条件,那么这⾏记录
不会参加分组;⽽HAVING是对分组后数据的约束。

5.6 LIMIT

LIMIT⽤来限定查询结果的起始⾏,以及总⾏数。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值