还怕学不会数据库sql语句吗??

数据库本人使用的是mysql,具体安装就不做介绍了
mysql官网下载地址:https://www.mysql.com

在这里插入图片描述

一. DDL(数据库定义语言)

1.数据库操作

1.1新增数据库

语法: CREATE DATABASE 【 IF NOT EXISTS 】库名 【CHARACTER SET 编码集】;
例如:新增一个名字为shop的数据库,并且指定默认编码集为gbk

CREATE DATABASE IF NOT EXISTS shop CHARACTER SET gbk;

1.2修改数据库

语法:ALTER DATABASE 库名 options
例如:修改shop的编码集格式为utf8

ALTER DATABASE shop1 CHARACTER SET utf8;

1.3选择数据库

语法: use 库名
例如:切换当前使用的数据库为mysql数据库

use mysql;

1.4删除数据库

语法:DROP DATABASE 【 IF EXISTS 】 库名
例如:删除上述步骤的生成的数据库shop

DROP DATABASE IF EXISTS  shop;

2.表操作

2.1.创建表

基本语法

CREATE TABLE table_name (
	column_name1 column_type1 【约束1,
  	column_name2 column_type2 【约束2;
  	column_name3 column_type3 【约束3;
  ...
  
);

例如:创建一个员工表,包括4列,分别为 员工id, 姓名, 年龄, 工资

CREATE TABLE `employee` (
  `id` int(11) NOT NULL PRIMARY KEY COMMENT '员工id',
  `name` varchar(10) NOT NULL COMMENT '姓名',
  `age` tinyint(4) NOT NULL COMMENT '年龄',
  `salary` float NOT NULL COMMENT '工资',
  `startdate` varchar(10) NOT NULL COMMENT '入职日期'
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

2.2表的修改

a.修改列名

#将入职日期列的名字修改为hiredate
ALTER TABLE employee CHANGE COLUMN startdate hiredate VARCHAR(15);

b.修改列的类型或约束

#将入职日期列的类型修改为datetime类型
ALTER TABLE employee MODIFY COLUMN hiredate DATETIME;

c.新增列

#新增一列部门id列
ALTER TABLE employee ADD COLUMN dept TINYINT NOT NULL COMMENT '部门id';

d.删除列

#新增名称为test的列
ALTER TABLE employee ADD COLUMN test TINYINT NOT NULL;
#删除刚才新增的test列
ALTER TABLE employee DROP COLUMN test 

2.3表的删除

DROP TABLEIF EXISTS】 employee;

2.4表的备份

CREATE TABLE employee_back SELECT * FROM employee;

3.mysql常用的数据类型

3.1 数值类型

在这里插入图片描述

3.2时间类型

在这里插入图片描述

3.3字符型

在这里插入图片描述

二、DML(数据库操纵语言)

操作包括数据的插入修改和删除

1.插入 insert

#方式一
INSERT INTO table_name ( field1, field2,...fieldN ) VALUES( value1, value2,...valueN );
#方式二
INSERT INTO table_name SET field1=value1, field2=value2,... fieldN=valueN;

2.修改 update

UPDATE table_name SET field1=new-value1, field2=new-value2 [WHERE Clause]

3.删除delete

DELETE FROM table_name [WHERE Clause];

#删除整张表的数据
truncate table table_name;

三、DQL(数据库查询语言)

所有语法关键字结构:
SELECT 【distinct】【字段】
FROM 【表名】
WHERE 【筛选条件】
GROUP BY 【分组字段】
HAVING 【分组条件】
ORDER BY 【排序字段】
LIMIT 【限制条数】

3.1.基础查询

  • . 语法:select 查询列表 from 表名
  • . 特点:
    1. 查询列表可以为表中的字段、常量值、表达式、函数
    2. 查询的结果是一个虚拟的表格

1.查询表中的单个字段

select id from student

2.查询表中的多个字段

select id,name from student

3.查询表中的所有字段

#第一种
select id,name,age from student
#第二种
select * from student

#第一种可以根据自己的需求变换字段的顺序,而第二种只能是创建表时候的顺序

4.查询常量值

select 100;
select 'join';

5.查询表达式

select 100%98;

6.查询函数

#查询版本的函数version();
select version();

7.起别名


1.便于理解
2.如果字段有重名可以根据别名区分
#如果别名有关键字要用双引号包起来,As可省略不写
select 100%98 As 结果

8.去重

#distinct可以把重复的去掉
select distinct age from student;

3.2 条件查询

语法:select 查询列表 from 表名 where 筛选条件

1.条件表达式

#条件运算符:>  <  =  >=  <=  <>/!=
#找出年龄大于15的学生
select * from student where age > 15;

2.逻辑表达式

#逻辑运算符:and  or  not  可以理解为java中的&&  ||  !
#找出年龄在12到18之间的学生
select * from student where age >=12 and age <=18;
#找出年龄不在12到18之间的学生
select * from student where not(age >=12 and age <=18);

3.模糊查询

#like、between and、in、is null like :一般和通配符搭配使用
通配符: % 任意多个字符,包含0个字符 _ 任意单个字符

#一:Like的使用
#案例1:查询员工名中包含字符a的员工信息
select * from employees where last_name like '%a%';
#案例2:查询员工名中姓刘的员工信息
select * from employees where last_name like '刘%';
# 二:between and 的使用
 SELECT * FROM employee WHERE age BETWEEN 20 AND 25;
 # 三:in的使用
 SELECT id,myname FROM employee WHERE id=13 OR id =14 OR id=15;
 SELECT id,myname FROM employee WHERE id IN(13,14,15);
 

3.3排序查询

语法:
select 查询列表
from 表
【where 筛选条件】
order by 排序列表 【asc | desc】
1.asc表示升序,desc表示降序

  • 如果不写,默认是升序,order by 子句中可以放单个字段,多个字段,表达式,函数,别名;
select * from employee order by age asc;
select * from employee where id > 20 order by age desc;

select * from employee order by age asc,salary desc;

3.4常见函数

  • 概念:类似于java中的方法,将一组逻辑语句封装在方法中,对外暴露方法名
  • 好处:
    1.隐藏了实现细节
    2.提高代码的重用性
  • 调用:select 函数名 (实参列表) 【from 表】
a. 字符函数
	• concat         语句:select  concat (id,'_',myname) 编号名字 from employee  拼接字符串
	• length         语句:select length('刘杰liujie')    输出12    一个汉字3个字节
	• upper          语句:select  upper('liujie')          转换成大写    
	• lower           语句:select  upper('LIUJIE')         转换成小写  
	• substr 或者substring   
	# 索引从一开始 
	SELECT  SUBSTR('我的名字叫刘杰',5) output;     //叫刘杰
	SELECT  SUBSTR('我的名字叫刘杰',6,7) output;       //刘杰
	• instr       返回子串第一次出现的索引,如果找不到就返回0     
	• trim        去前后空格或可自定义去某个字符    
	• lpad        用指定的字符实现左填充指定长度
	• rpad        用指定的字符实现右填充指定长度    select  rpad('刘杰'2'*');replace    替换    select replace('刘杰在寝室','刘杰','刘大杰');
	
b. 数字函数
	• round       四舍五入
	• ceil            向上取整,返回>=该参数的最小整数
	• floor            向下取整,返回<=该参数的最小整数
	• mod            取余
	• truncate        截断
	
c. 日期函数
	• now        返回当前系统日期,包含时间
	• curdate           返回当前系统日期,不包含时间
	• curtime        返回当前时间,不包含日期
	• year                   可以指定获取的部分,年、月、日、小时、分钟、秒
	• monthdatehourminutesecond
	• date_format        将日期转化为字符   SELECT DATE_FORMAT(NOW(),'%y年%m月%d日') output
	
d.其它函数
	select  version();
	select  database();
	select  user();
	
e.流程控制函数
	if函数     
	case函数的使用一:swtich case
	case  列名  when  【常量】 then  【结果】
	case函数的使用二:
	case  when 条件1 要显示的值或语句1
	   when 条件2 要显示的值或语句2
	   .。。。。。。
	  else  要显示的值n或语句n
	end

3.5分组函数查询

语法:
select  分组函数,列(要求出现在group  by的后面)
from   表
【where 筛选条件】
group  by  分组的列表
【order  by  子句】
  • 功能:用来统计使用,又称聚合函数或统计函数或组函数
  • 分类:sum求和、avg平均值、max最大值、count计算个数
  • 特点:
  1. sum、avg一般用于处理数值型
    max、min、count可以处理任何类型
  2. 以上分组函数都忽略null值
  3. 可以和distinct搭配实现去重的运算
  4. count函数的单独介绍
    一般使用count(*)用作统计行数
  5. 和分组函数一同查询的字段要求是group by后的字段

3.6多表连接查询

含义:当查询的字段来自多个表时,会用到连接查询
语法:    select   查询列表
			from  表1   别名
			join   表2   别名
			on   连接条件
			【where  筛选条件】
			【group  by  分组】
			【having  筛选条件】
			【order   by  排序列表】

1.内连接

select 查询字段
from1 别名
inner join2 别名
on 连接条件

特点: 表1和表2同时通过连接条件能够连接上的数据才会查出,其他数据不查出

2.左右外连接

  • 语法: left|right join
  • 特点: 左连接以左表为主表,连接右表为从表, 最终的结果中,主表的数据会全部存在,如果在从表中根据连接条件无法在从表中找到数据,则结果表的从表部分全部以null值填充(右连接类似)

3 交叉连接(笛卡尔积)

  • 语法: cross join
  • 特点: 最终的结果为一个笛卡尔积

4. 等值连接和非等值连接

  • 特点即连接条件是否是等值的表达式(非等值可以是大于或者小于)

3.7子查询

  • 单行单列:返回的是一个具体列的内容,可以理解为一个单值数据;
  • 单行多列:返回一行数据中多个列的内容;
  • 多行单列:返回多行记录之中同一列的内容,相当于给出了一个操作范围;
  • 多行多列:查询返回的结果是一张临时表;

3.8联合查询

  • Select句1 union(all/distinct)select句2,查询结果拼接

  • 拼接的两个select语句查询的列数和列数据类型必须相同,union会去处相同的记录,而union all会将相同的记录保留(所谓相同就是每个列都必须相同)

在这里插入图片描述

此篇是我自己整理的笔记,若有不妥之处,还望指出。希望能帮到大家。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值