SQL概述:

sql概述:SQL:Structure Query Language(结构化查询语句)sql的分类:DDL(Data Definition Language):数据定义语言,用来定义数据库对象:库,表,列等DML(Data Manipulation Language):数据操作语言,用来定义数据库记录(数据)DCL(Data Control Language):数据控制语言,用来定义访问权限和安全级别DQL(Data Query Language):数据查询语言,用来查询记录(数据)。注意:sq
摘要由CSDN通过智能技术生成

sql概述:

SQL:Structure Query Language(结构化查询语句)

sql的分类:

DDL(Data Definition Language):数据定义语言,用来定义数据库对象:库,表,列等

DML(Data Manipulation Language):数据操作语言,用来定义数据库记录(数据)

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

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

DDL操作:操作数据库,表,列等

使用的关键字:CREATE,ALTER,DROP

对库的操作:

创建:

CREATE DATABASE mysql1;
CREATE DATABASE mysql2 CHARACTER SET GBK

查询:

1.查看所有的数据库
    SHOW DATABASE
2.查看当前使用的数据库
    SELECT DATABASE();

修改:

1.将当前的数据库的字符集改成utf8
    ALTER DATABASES mydb1 CHARACTER SET utf8

删除:

1.删除指定的数据库
    DROP DATABASES mydb1

切换:

USE mydb2;

对表的操作:

CREATE TABLE 表名(
	字段1 字段类型
    字段2 字段类型
    ...
    字段n 字段类型
)CHARSET=UTF8;

常用的数据类型:

int:整型
double:浮点型,例如double(5,2)表示最多5位,其中必须有两位小数,即最大值为999.99
char(length):固定length长度的字符串类型
varchar(length):可变长的字符串类型,length为最大长度,实际长度视情况而而定
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支持

常用操作(表):

1.查看当前数据库中所有的表:
   SHOW DATABASES;
2.查看表的信息:
    DESC employee;
3.在上面的员工表的基础上增加一个image列
    ALTER TABLE employee ADD image blob;
4.修改job列,使其长度变成60
    ALTER TABLE employee MODIFY job varchar(60);
5.删除表中的image列,一次只能删除一列
    ALTER TABLE employee DROP image;
6.表名修改为user
    RENAME TABLE employee TO user;
7.查看表格的创建细节
    SHOW CREATE TABLE user;
8.修改表的字符集为gbk
    ALTER TABLE user CHARACTER SET gbk;
9.列名name修改为username
    ALTER TABLE user CHANGE name username varchar(100);
10.备份表结构和表数据
	CREATE TABLE tname2 like tname1;
11.删除表
    DROP TABLE user;
DML操作:

是对表中的数据进行的增,删,改的操作,

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

插入操作:

INSERT INTO 表名(列名1,列名2,…) VALUES(内容1,内容2…); 注意:列名和列值的类型,个数,顺序要一一对应。

可以把列名当作java中的形参,把列值当作Java中的实参,值不要超过列定义的长度,如果插入控制,请使用null插入,和日期,字符一样,都是用单引号括起来

-- 插入操作
-- 注意:在mysql中,字符串和日期类型的数据需要使用''括起来
INSERT INTO teachers(id,`name`,age,entryDate,sex) VALUES('01','zhangsan',20,'2021-6-11','男');
-- 如果值列表是全的,字段列表可以省略
INSERT INTO teachers VALUES('02','lisi',21,'2021-5-12','女');
-- 如果值列表信息不全时,必须要保证字段列表和值列表保持一致
INSERT INTO teachers(id,`name`,age) VALUES('03','wangwu',22);
-- 一次插入多条记录
INSERT INTO teachers(id,`name`,age,entryDate,sex) 
VALUES('05','zhangsan1',21,'2021-6-11','女'),
('06','zhangsan1',21,'2021-6-11','女'),
('07','zhangsan1',21,'2021-6-11','女'),
('08','zhangsan1',21,'2021-6-11','女');

-- 第五种,将teacher中的数据插入到teacher1中
CREATE TABLE teacher1(
	id VARCHAR(10),
	`name` VARCHAR(20),
	age INT,
	entryDate DATE,
	sex VARCHAR(1)
)CHARSET=utf8
-- select 列名 from 表名
-- * 表示全部
-- 表示将teachers表中的所有数据全部插入到teacher1中
-- 注意:我们要保证插入的列与teacher1中的列数,类型保持一致
INSERT INTO teacher1 SELECT * FROM teachers;

注意:

1.mysql不支持select into

2.在复制的时候,是按照列的顺序依次进行的

3.新表的列和原来表的列的名字,类型都可以不一样,照样复制成功,但是会出现数据类型转换错误,具体的:名字不一样,问题不大,类型不一样,出现错误,比如将int类型转换成varchar类型,会显示0;

修改操作:

语法:

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

-- 修改操作
-- 修改所有老师的某一栏信息
UPDATE  teachers SET age = 20;
-- 修改某位老师的某一栏信息
UPDATE teachers SET age = 22 WHERE NAME = 'zhangsan';
-- 修改某一位老师的多栏信息
UPDATE teachers SET age = 40,id = '1001' WHERE NAME = 'zhangsan';
-- 修改某一位老师的信息的某一栏信息(在原有的基础上进行改变)
UPDATE teachers SET age = age +10 WHERE NAME  = 'lisi';

删除操作:

DELETE FROM 表名 【WHERE 列名 = 值】;

-- 删除操作
-- 删除表中的某一行记录
DELETE FROM teachers WHERE NAME = 'zhangsan1';
-- 删除表中所有的记录
DELETE FROM teacher;
-- 使用truncate删除表中的记录
TRUNCATE TABLE teacher;

TRUNCATE和DELETE的区别:

DELETE删除表中的数据表结构还存在,删除的数据可以找回,TRUNCATE删除是把表直接DROP掉,然后再创建一个同样的新表,TRUNCATE删除的数据不能找回(这里找回的意思是回滚),执行速度比DELETE快

DQL操作:

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

语法:

SELECT 列名 FROM 表名

语法说明:

SELECT 列名:要查询的列名称
FROM 表名:要查询的表名称
WHERE condition:行条件
GROUP BY grouping_colunms:对结果进行分组
HAVING condition:分组后的行条件
OEDER BY sorting_columns:对结果进行排序
LIMIT offset_start,row_count:对结果进行限定

基础查询

-- 1.查询所有的列
SELECT * FROM student;
-- 2.查询部分的列
SELECT sid,age,gender FROM student;

条件查询

语法:

条件查询就是在查询时给出where子句,在where子句中可以使用如下运算符以及关键字

where查询常用的条件

查询条件谓词
比较=,<,>,>=,<=,!=,<>(不等于),!<(不小于),!>,NOT+以上比较运算符
确定范围BETWEEN AND,NOT BETWEEN AND
确定集合IN,NOT IN
字符匹配LIKE,NOT LIKE
空值IS NULL,IS NOT NULL
多重条件(逻辑运算)AND,OR,NOT
-- 条件查询
SELECT * FROM student WHERE gender = 'female' AND age < 50;
SELECT * FROM student WHERE sid = 'S_1001' OR sname = 'liSi'; 
SELECT * FROM student WHERE sid IN('S_1001','S_1002','S_1003');

模糊查询

语法:

当想查询,姓名中包含了a字母的学生就需要使用模糊查询了,模糊查询需要使用的关键字为LIKE

通配符:

_ : 任意一个字母

% :任意0-n个字母

SELECT * FROM student WHERE sname LIKE '_____';
SELECT * FROM student WHERE sname LIKE 'l%i';

字段控制查询:

-- 去除重复记录(去除重复记录需要使用distinct关键字)
SELECT DISTINCT gender FROM student;
SELECT DISTINCT salary FROM employee; 
-- 转换NULL值
SELECT ename,salary+IFNULL(comm,0) FROM employee;
-- 给列名添加别名
SELECT *, IFNULL(comm,0)+salary AS total FROM employee;

sql中的注意点

1.在sql中对列的数据进行运算时,只有数据类型相同的数据才能运算,如果类型不一样,那么会出错

2.在sql中任何数据与NULL相加的结果还是NULL,所以我们需要使用IFNULL(列名,parameter1)函数,这个函数可以将NULL转换我们指定的值;

排序:

-- 查询所有学生的记录,并按年龄升序排列
SELECT * FROM student ORDER BY age ASC;
-- 查询所有学生的记录,并按照年龄降序排列
SELECT * FROM student ORDER BY age DESC;
-- 不指定排序规则,默认按照升序排列
SELECT * FROM student ORDER BY age;
-- 多层排序规则
SELECT * FROM employee ORDER BY salary DESC,empno ASC;

聚合函数:

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

COUNT():统计指定列不为null的记录行数(count([distinct/all] <列名>))

MAX():计算指定列的最大值,如果指定列为字符串类型,那就按字符串的字典排序运算

MIN();计算指定列的最小值

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

AVG();计算指定列的平均值

注意:where子句中是不能用聚集函作为条件表达式的,聚合函数只能用于select子句或者group by中的having子句中

-- count()
SELECT COUNT(*) FROM employee;
SELECT COUNT(comm) FROM employee;
-- min()/max()
SELECT MAX(salary) FROM employee;
SELECT MIN(ename) FROM employee;
SELECT MAX(salary),MIN(salary) FROM employee;
-- sum()/avg()
SELECT SUM(salary) FROM employee;
SELECT SUM(comm) FROM employee;
SELECT  AVG(salary) FROM employee;

分组查询:

分组查询需要使用GROUP BY

和聚合函数同时出现的列名,一定要写在group by之后

-- 分组查询
-- 查询每个部门的部门编号和每个部门的工资和:
SELECT deptno,SUM(salary) FROM employee GROUP BY deptno;
SELECT SUM(salary) FROM employee GROUP BY deptno;
SELECT deptno FROM employee GROUP BY deptno;
-- HAVING子句
-- 查询工资总和大于9000的部门编号以及工资和:
SELECT deptno,SUM(salary) FROM employee GROUP BY deptno  HAVING SUM(salary) > 9000;
注意:having和where的区别
1.having是在分组之后对数据进行过滤,但是where是在分组之前对数据进行过滤
2.having后面可以使用分组函数(聚合函数),where后面不可以使用分组函数(聚合函数)
3.where是对分组前记录的条件,如果某行记录没有满足where子句么这行记录不会参与分组;二having是对分组后数据的约束

Limit

limit用来限定查询结果的起始行,以及总行数

SELECT * FROM employee LIMIT 0,5;
SELECT * FROM employee LIMIT 3,10;
查询语句书写顺序:
select > from > where > group by > having > order by > limit
查询语句执行顺序:
from > where > group by > having > select > order by > limit
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值