SQL概念以及DDL,DML,DQL的简单查询(一)

本文全面介绍了SQL的基本概念,包括SQL的定义、作用、语句分类,以及在MySQL中的具体应用。涵盖了数据库的创建、修改、删除,表结构的操作,数据的增删改查等核心内容。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.SQL

1.1 什么是SQL

structured Query Language 结构化查询语言

1.2 SQL作用

  1. 是一种所有关系型数据库的查询规范,不同的数据库都支持
  2. 通用的数据库操作语言,可以用在不同的数据库中
  3. 不同的数据库SQL语句有一些区别

1.3 SQL语句分类

  1. Data Definition Language(DDL数据定义语言),如:建库,建表
  2. Data Manipulation Language(DML 数据操纵语言),如:对表中的记录操作增删改
  3. Data Query Language(DQL 数据查询语言),如:对表中查询操作
  4. Data Control Language(DCL 数据控制语言),如:对用户

1.4 MySQL的语法

  1. 每条语句以分号结尾
  2. SQL中不区分大小写,关键字中认为大写和小写是一样的
  3. 三种注释
- -空格单行注释
/* */多行注释
#这是mysql特有的注释方式

2. DDL操作数据库

2.1 创建数据库的几种方式

  1. 创建数据库
create database 数据库名;
  1. 判断数据库是否已经存在,不存在则创建数据库
create database if not exists 数据库名;
  1. 创建数据库并指定字符集
create database 数据库名 character set 字符集;
  • 具体例子
-- 直接创建数据库
create database db1;
-- 判断是否存在,如果不存在则创建数据库
create database if not exists db1;
-- 创建数据库并指定字符集为gbk
create database db1 default character set gbk;

2.2 查看数据库

  1. 查看所有数据库
show databases;
  1. 查看某个数据库的定义信息
show create database db1

2.3 修改数据库

  1. 修改数据库默认的字符集
alter database 数据库名 default character set 字符集;
  • 例子
alter database db1 character set utf8;

2.4 删除数据库

  1. 语法
drop database 数据库名;
  • 例子
drop database db1;

2.5 使用数据库

  1. 查看正在使用的数据库
select database();
  1. 使用/切换数据库
use 数据库名;
  • 例子
-- 1
select database();
-- 2
use db1;

3. DDL操作表结构

3.1 创建表

  1. 语法
create table 表名(
	字段名1 字段类型1,
	字段名2 字段类型2
);
  • 例子
create table student(
	id int,-- 整数
	name varchar(20), -- 字符串
	birthday date -- 生日,最后没有逗号	
);

3.2 MySQL数据类型

  1. 常见数据类型
类型描述
int整型
double浮点型
varchar字符串型
date日期类型,格式为yyyy-MM-dd,只有年月日,没有分秒

3.2 查看表

  1. 查看某个数据库中的所有表
show tables
  1. 查看表结构
DESC 表名;
  1. 查看创建表的SQL语句
show create table 表名;
  • 例子
-- 查看db1的所有表
use db1;
show tables;
-- 查看student表的结构
desc student;
-- 查看student的创建表的SQL语句
show create table student;-- 该语句存在的目的是为了避免关键字的冲突

3.4 快速创建一个表结构相同的表

  1. 语法
create table 新表名 like 旧表名;
  • 例子
--  创建s1表,s1表结构和student表结构相同
create table s1 like student;
desc s1;

3.5 删除表

  1. 直接删除表
drop table 表名;
  1. 判断表是否存在,如果存在则删除表
drop table if exists 表名;
  • 例子
-- 直接删除表s1;
drop table s1;
-- 判断表是否存在并删除s1表
drop table if exists s1;-- 如果表不存在,不删除;存在则删除

3.6 修改表结构

  1. 添加表列ADD
alter table 表名 add 列名 类型;
  1. 修改列类型modify
alter table 表名 modify 列名 新的类型;
  1. 修改表的列名 change
alter table 表名 change 旧列名 新列名 类型;
  1. 删除列 drop
alter table 表名 drop 列名;
  1. 修改表名
rename table 表名 to 新表名;
  1. 修改表的字符集 character set
alter table 表名 character set 字符集;
  • 例子
-- 1.为学生表添加一个新的字段 remark,类型为varchar(20)
alter table student add remark varchar(20);
-- 2.将student表中的remark字段类型改成varchar(100)
alter table student modify remark varchar(100);
-- 3.将student表中的remark字段名改成intro,类型varchar(30)
alter table student change remark intro varchar(30);
-- 4.删除student表中的字段intro
alter table student drop intro;
-- 5.将学生表student改名成student2;
rename table student to student2;
-- 6.将studnt2表的编码修改成gbk
alter table student2 character set gbk;

4. DML 操作表中的数据

	对表中的记录进行增删改操作

插入记录

1.插入全部字段

insert into 表名 (字段名1,字段名2,字段名3...) values(1,2,3...)

2.不写字段名

insert into 表名 values(1,2,3...)
  1. 插入部分数据
insert into 表名 (字段名1,字段名2,字段名3...) values(1,2,3...) #没有添加数据的字段会使用NULL
  • 例子
insert into student (id,name, age, sex) values (1,'孙悟空',20,'男');
insert into student values (1,'孙悟空',20,'男');
insert into student (id,name, age, sex) values (1,'孙悟空',NULL,'男');

更新表记录

  1. 不带条件修改数据
update 表名 set 字段名=; -- 修改所有的行
  1. 带条件修改数据
update 表名 set 字段名=where 字段名=;
  • 例子
-- 不带条件修改数据,将所有的性别改成女
update student set sex='女'
-- 带条件修改数据,将id号为2的学生性别改为男
update student set sex='男' where id=2;
-- 一次修改多个列,把id为的学生年龄改成26岁,address改成北京
update student set age=16,address='北京' where id=3;

删除表记录

  1. 不带条件删除数据
delete from 表名;
  1. 带条件删除数据
delete from 表名 where 字段名=;
  1. 使用truncate删除表中所有记录
truncate table 表名;
  1. truncate和delete的区别
    truncate相当于删除表的结构,再创建一张空表
  • 例子
-- 条件删除数据,删除id为1的记录
delete from student where id=1;
-- 不带条件删除数据,删除表中的所有记录
delete from student;

5. DQL查询表中的数据

查询不会对数据库中的数据进行修改,只是一种显示数据的方式

简单查询

  1. 查询表中所有行和列的数据
select * from 表名;

指定列的别名进行查询

  1. 查询指定列
select 字段名1,字段名2,字段名3,... from 表名;
  1. 指定列的别名进行查询
    使用别名的好处:显示的时候使用新的名字,并不修改表的结构
-- 1. 对列指定别名
select 字段名1 as 别名,字段名2 as 别名 ... from 表名;
-- 2. 对列和表同时指定别名
select 字段名1 as 别名,字段名2 as 别名 ... from 表名 as 表别名;
  • 例子
-- 1.查询所有学生
select * from student;
-- 2.查询student表中的name和age列
select name,age from student;
-- 3.使用别名
select name as 姓名,age as 年龄 from student;
-- 4.表使用别名
select st.name as 姓名, age as 年龄 from student as st;#表使用别名的原因:用于多表查询操作

清除重复值

  1. 查询指定列并且结果不出现重复数据
select distinct 字段名 from 表名;
  • 例子
-- 查询学生来自哪些地方
select address from student;

-- 去掉重复的记录
select distinct address from student;

查询结果参与运算

  1. 某列数据和固定值运算
select 列名1+固定值 from 表名;
  1. 某列数据和其他列数据参与运算
select 列名1+列名2 from 表名;  #参与运算的必须是数值类型
  • 例子
select * from student;
-- 给所有的数学加5分
select math+5 from student;
-- 查询所有学生信息,math+english的和
select *,(math+english) as 总成绩 from student;
-- as可以省略
select *,(math+english)  总成绩 from student;

条件查询

  1. 为什么要条件查询
    如果没有查询条件,则每次查询所有行。实际应用中,一般要指定查询的条件。对记录进行过滤。
  2. 语法
select 字段名 from 表名 where 条件;
  1. 运算符
比较运算符说明
between … and在一个范围之内,如:between 100 and 200 相当于条件在100到200之间,包头又包尾
>,<,<=,>=,=,<><>在SQL中表示不等于,在mysql中也可以使用!=,没有==
in(集合)集合表示多个值,使用逗号分隔
like’张%’模糊查询
is null查询某一列为null的值,注不能写成=NULL
逻辑运算符说明
and 或 &&与,SQL中建议使用前者,后者并不通用
or 或
not 或 !
  • 例子
-- 查询math分数大于80分的学生
select * from student where math>80;
-- 查询english 分数小于等于80分的学生
select * from student where english <=80;
-- 查询age等于20岁的学生
select * from student where age=20;
-- 查询age不等于20岁的学生
select * from student where age != 20;
select * from student where age <> 20;
-- 查询age大于35且性别为男性的男生
select * from student where age>35 and sex='男';
-- 查询age大于35或性别为男的学生
select * from student where age>35 or sex='男';
-- 查询id是1或3或5的学生
select * from student where id=1 or id=3 or id=5;
  1. in关键字
select 字段名 from 表名 where 字段 in(数据1,数据2,...);
#in 里面的每一个数据都会作为一次条件,只要满足条件的就会显示
  • 例子
-- 查询id是1或3或5的学生
select * from student where id in(1,3,5);
-- 查询id不是1或3或5的学生
select * from student where id not in(1,3,5);
  1. 范围查询
    between 值1 and 值2
    表示从值1到值2范围,包头又包尾
-- 查询english成绩大于等于75,且小于等于90的学生
select * from student where english between 75 and 90;
  1. like关键字
    like表示模糊查询
select * from 表名 where 字段名 like '通配字符串';
  • MySQL通配符
通配符说明
%匹配任意多个字符串
_(下横杠)匹配一个字符
  • 例子
-- 查询姓马的学生
select * from student where name like '马%';
-- 查询姓名中包含'德'字的学生
select * from student where name like '%德%';
--查询姓马,且姓名有两个字的学生
select * from student where name like '马_';
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值