SQL语句操作详解-DDL操作、DML 操作、 DQL 查询表中数据

Server端

Client端:Navicat 

接下来,我们就要使用Client端去操作MySQL数据库(数据的存储+管理),说白了就是数据的

增删改查(CRUD)

C: create 增加

R: Retrieve 获取/查询

U: update更新

D: delete删除

我们需要使用Client端写/发送SQL语句到Server端

SQL语句按照功能,往往分成这么几类:

新建Excel-sheet-填入数据

新建数据库(DataBase)—> 新建表(Table) —> 插入数据/更新数据/删除数据

下面的几类SQL语句就是在帮助我们完成上面的流程

  • DDL语句(Data Defifinition Language 数据定义语言)

创建数据库、创建表、修改表结构等、结构性操作,创建或修改数据库/表结构,不涉及具体存储的数据还

  • DML语句(Data Manipulation Language 数据操纵语言)

针对table数据表中数据的增删改,使用DML

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

针对table数据表中数据的查询操作,使用DQL

  • DCL语句(Data Control Language 数据控制语言)--了解

事务的提交/回滚等

SQL通用语法

SQL语句可以单行 或者 多行书写,以分号结尾 ; (Sqlyog中可以不用写分号)

可以使用空格和缩进来增加语句的可读性。

MySql中使用SQL不区分大小写,一般关键字大写,数据库名、表名、列名、小写。

注释方式SQL语句操作详解-DDL操作、DML 操作、 DQL 查询表中数据_第1张图片

DDL操作-数据库

创造数据库SQL语句操作详解-DDL操作、DML 操作、 DQL 查询表中数据_第2张图片

查看/选择数据库 

SQL语句操作详解-DDL操作、DML 操作、 DQL 查询表中数据_第3张图片  

修改数据库字符集 

删除数据库

方式1 直接指定数据库名进行创建 

CREATE DATABASE db1; 

方式2 指定数据库名称,指定数据库的字符集,一般都指定为 utf8 

CREATE DATABASE db1_1 CHARACTER SET utf8;

-- 切换数据库 从db1 切换到 db1_1 

USE db1_1; 

-- 查看当前正在使用的数据库 

SELECT DATABASE(); 

-- 查看Mysql中有哪些数据库 

SHOW DATABASES; 

-- 查看一个数据库的定义信息 

SHOW CREATE DATABASE db1_1; 

-- 将数据库db1 的字符集 修改为 utf8 

ALTER DATABASE db1 CHARACTER SET utf8; 

-- 查看当前数据库的基本信息,发现编码已更改 

SHOW CREATE DATABASE db1; 

-- 删除某个数据库 

DROP DATABASE db1_1;

DDL 操作-数据表

一个数据库中可以n个表,表中又有字段(列),在建表的时候就需要定义好字段(指定字段

属性---->字段数据类型+字段长度等)

SQL语句操作详解-DDL操作、DML 操作、 DQL 查询表中数据_第4张图片

注意:MySql中的 char类型与 varchar类型,区别在于:char类型是固定长度的: 根据定义的字符串长度分配足够的空间。varchar类型是可变长度的: 只使用字符串长度所需的空间
比如:保存字符串 "abc"。x char(10) 占用10个字节 ;y varchar(10) 占用3个字节。

char类型适合存储 固定长度的字符串,比如 密码 ,性别一类。

varchar类型适合存储 在一定范围内,有长度变化的字符串。

创建表

语法格式如下:

CREATE TABLE 表名( 

字段名称1 字段类型(长度), 

字段名称2 字段类型 注意 最后一列不要加逗号 

);

-- 创建表 

表名:category 

表中字段: 

分类ID :cid ,为整型 

分类名称:cname,为字符串类型,指定长度20

CREATE TABLE category( 

cid INT, 

cname VARCHAR(20) 

);

-- 创建测试表 

表名: test1 

表中字段: 

测试ID : tid ,为整型 

测试时间: tdate , 为年月日的日期类型 

CREATE TABLE test1( 

tid INT, 

tdate DATE 

);

快速创建一个表结构相同的表(复制表结构)

create table 新表名 like 旧表名; 

-- 创建一个表结构与 test1 相同的 test2表 

CREATE TABLE test2 LIKE test1; 

-- 查看表结构 

DESC test2;

查看表

SQL语句操作详解-DDL操作、DML 操作、 DQL 查询表中数据_第5张图片

-- 查看当前数据库中的所有表名 

SHOW TABLES; 

-- 显示当前数据表的结构 

DESC category; 

-- 查看创建表的SQL语句 

SHOW CREATE TABLE category; 

删除表SQL语句操作详解-DDL操作、DML 操作、 DQL 查询表中数据_第6张图片

-- 直接删除 test1 表 

DROP TABLE test1; 

-- 先判断 再删除test2表 

DROP TABLE IF EXISTS test2; 

修改表 

1. 修改表名

语法格式:rename table 旧表名 to 新表名; 

RENAME TABLE category TO category1; 

2.向表中添加列, 关键字 ADD

语法格式:alter table 表名 add 字段名称 字段类型

# 为分类表添加一个新的字段为 分类描述 cdesc varchar(20) 

ALTER TABLE category ADD cdesc VARCHAR(20);

3.修改表中列的数据类型或长度 , 关键字 MODIFY

语法格式:alter table 表名 modify 字段名称 字段类型 

ALTER TABLE category MODIFY cdesc VARCHAR(50); 

4.修改列名称 , 关键字 CHANGE

语法格式:alter table 表名 change 旧列名 新列名 类型(长度);

ALTER TABLE category CHANGE cdesc description VARCHAR(30); 

5.删除列 ,关键字 DROP

语法格式:alter table 表名 drop 列名; 

ALTER TABLE category DROP description; 

DML 操作-表中数据

插入数据

向学生表中添加数据,3种方式

表名:student 

表中字段: 

学员ID, sid int 

姓名, sname varchar(20) 

年龄, age int 

性别, sex char(1) 

地址, address varchar(40) 

# 创建学生表 

CREATE TABLE student( 

sid INT, 

sname VARCHAR(20), 

age INT, 

sex CHAR(1), 

address VARCHAR(40) 

); 

  • 方式1: 插入全部字段, 将所有字段名都写出来

语法结构:insert into 表名 (字段名1,字段名2...) values(字段值1,字段值2...);

注:字段名和字段值位置一一对应。

INSERT INTO student (sid,sname,age,sex,address) VALUES(1,'孙悟 

空',20,'男','花果山');

  •  方式2: 插入全部字段,不写字段名

INSERT INTO student VALUES(2,'孙悟饭',10,'男','地球');

  • 方式3:插入指定字段的值

insert into student(sname,address) values ('白骨精','下坡'); 

注意:

1) 值与字段必须要对应,个数相同&数据类型相同

2)值的数据大小,必须在字段指定的长度范围内

3)varchar char date类型的值必须使用单引号包裹。

4)如果要插入空值,可以忽略不写,或者插入null

5) 如果插入指定字段的值,必须要上写列名

更改数据

  • 语法格式1:不带条件的修改

update 表名 set 列名 = 值 

-- 将所有的性别改为女,等于锁定列,一列全改

UPDATE student SET sex = '女'

  • 语法格式2:带条件的修改

update 表名 set 列名 = 值 [where 条件表达式:字段名 = 值 ] 

-- 带条件的修改,将sid 为3的学生,性别改为男

UPDATE student SET sex = '男' WHERE sid = 3;

-- 一次修改多个列, 将sid为 2 的学员,年龄改为 20,地址改为北京

UPDATE student SET age = 20,address = '北京' WHERE sid = 2; 

 删除数据

  • 语法格式1:删除所有数据

delete from 表名 

  • 语法格式2: 指定条件删除数据

delete from 表名 [where 字段名 = 值]

1)删除 sid 为 1 的数据

DELETE FROM student WHERE sid = 1; 

2) 删除所有数据

DELETE FROM student;

3) 如果要删除表中的所有数据,有两种做法 

1. delete from 表名; 不推荐. 有多少条记录 就执行多少次删除操作. 效率低

2. truncate table 表名: 推荐. 先删除整张表, 然后再重新创建一张一模一样的表. 效率高

当一个表中条数非常多,又要做删除动作的时候,如果用delete会很慢,那我们可以使用

truncate

truncate table student; 

DQL 查询表中数据 

#创建员工表 

表名 emp 

表中字段: 

eid 员工id,int 

ename 姓名,varchar 

sex 性别,char 

salary 薪资,double 

hire_date 入职时间,date 

dept_name 部门名称,varchar 

#创建员工表 

CREATE TABLE emp( 

eid INT, 

ename VARCHAR(20), 

sex CHAR(1), 

salary DOUBLE, 

hire_date DATE, 

dept_name VARCHAR(20) 

);

#添加数据 

INSERT INTO emp VALUES(1,'孙悟空','男',7200,'2013-02-04','教学部'); 

INSERT INTO emp VALUES(2,'猪八戒','男',3600,'2010-12-02','教学部'); 

INSERT INTO emp VALUES(3,'唐僧','男',9000,'2008-08-08','教学部'); 

INSERT INTO emp VALUES(4,'白骨精','女',5000,'2015-10-07','市场部'); 

INSERT INTO emp VALUES(5,'蜘蛛精','女',5000,'2011-03-14','市场部'); 

INSERT INTO emp VALUES(6,'玉兔精','女',200,'2000-03-14','市场部'); 

INSERT INTO emp VALUES(7,'林黛玉','女',10000,'2019-10-07','财务部'); 

INSERT INTO emp VALUES(8,'黄蓉','女',3500,'2011-09-14','财务部'); 

INSERT INTO emp VALUES(9,'吴承恩','男',20000,'2000-03-14',NULL); 

INSERT INTO emp VALUES(10,'孙悟饭','男', 10,'2020-03-14',财务部);

简单查询

执行顺序:FROM --> WHERE --> GROUP BY --> HAVING --> SELECT --> ORDER BY

SQL语句操作详解-DDL操作、DML 操作、 DQL 查询表中数据_第7张图片

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

  • 语法格式:select 列名 from 表名 

-- 使用 * 表示所有列 

SELECT * FROM emp; 

  •  查询emp表中的所有记录,仅显示id和name字段 ;

SELECT eid,ename FROM emp;

  • 指定别名,as 可以省略,将所有的员工信息查询出来,并将列名改为中文

SELECT ename as '员工姓名' ,salary as '薪资' FROM emp;

  • 去重查询,显示一共几个部门 

select distinct dept_name from emp;

  • 运算查询 (查询结果参与运算)

SELECT ename , salary + 1000 FROM emp;  

条件查询

如果查询语句中没有设置条件,就会查询所有的行信息,在实际应用中,一定要指定查询条件,对记

录进行过滤

语法格式:select 列名 from 表名 where 条件表达式 

* 先取出表中的每条数据,满足条件的数据就返回,不满足的就过滤掉

  • 比较运算符

SQL语句操作详解-DDL操作、DML 操作、 DQL 查询表中数据_第8张图片

 

  •  逻辑运算符

SQL语句操作详解-DDL操作、DML 操作、 DQL 查询表中数据_第9张图片

 # 查询员工姓名为黄蓉的员工信息 

SELECT * FROM emp WHERE ename = '黄蓉'; 

# 查询薪水价格为5000的员工信息 

SELECT * FROM emp WHERE salary = 5000; 

# 查询薪水价格不是5000的所有员工信息 

SELECT * FROM emp WHERE salary != 5000; 

SELECT * FROM emp WHERE salary <> 5000; 

# 查询薪水价格大于6000元的所有员工信息 

SELECT * FROM emp WHERE salary > 6000; 

# 查询薪水价格在5000到10000之间所有员工信息 

SELECT * FROM emp WHERE salary BETWEEN 5000 AND 10000;

# 查询薪水价格是3600或7200或者20000的所有员工信息 

-- 方式1: or 

SELECT * FROM emp WHERE salary = 3600 OR salary = 7200 OR salary = 20000; 

-- 方式2: in() 匹配括号中指定的参数 

SELECT * FROM emp WHERE salary IN(3600,7200,20000); 

 

  • 模糊查询-通配符 
SQL语句操作详解-DDL操作、DML 操作、 DQL 查询表中数据_第10张图片 %为不确定的地方,_可代表一个任意字符

# 查询含有'精'字的所有员工信息 

SELECT * FROM emp WHERE ename LIKE '%精%'; 

# 查询以'孙'开头的所有员工信息 

SELECT * FROM emp WHERE ename LIKE '孙%'; 

# 查询第二个字为'兔'的所有员工信息 

SELECT * FROM emp WHERE ename LIKE '_兔%'; 

# 查询没有部门的员工信息 

SELECT * FROM emp WHERE dept_name IS NULL; 

-- SELECT * FROM emp WHERE dept_name = NULL; 

# 查询有部门的员工信息 

SELECT * FROM emp WHERE dept_name IS NOT NULL;

你可能感兴趣的:(数据分析基础知识,数据库,sql,mysql)