Sql相关

本文详细介绍了SQL的基础操作,包括数据库的创建、删除,表的增删改查,以及事务的ACID特性。重点讲解了DML、DDL、DCL和DQL语句,如INSERT、DELETE、UPDATE、SELECT等,并探讨了事务的隔离级别。此外,还涵盖了子查询、联接查询、分组查询和聚合函数等高级用法,为数据库管理提供了全面的知识框架。
摘要由CSDN通过智能技术生成

@[toc]目录

#概述

#安装

#sql语句

#事务

#增删改查!!

#一、增:有2种方法

#二、删:有2种方法

#三、改 使用update更新修改数据

#四、 查

#1).查询所有数据行和列

#2).查询部分行列--条件查询

#3).在查询中使用AS更改列名

#4).查询空行

#5).排序查询 (关键字: order by , asc ,desc)

#6).分页查询(关键字:limit 请求页数,请求的条数 )

#7).去重查询 distinct

#2.模糊查询  _ 表示一个未知字符 %表示0或多个未知字符 

#1).使用like进行模糊查询  

#2).使用between在某个范围内进行查询

#3).使用in在列举值内进行查询(in后是多个的数据)

#3.分组查询

#1).使用group by进行分组查询

 #2).使用having子句进行分组筛选

#4.聚合函数

#5.多表查询

#1).子查询  将一条sql的查询结果作为另一条sql条件的值

#2).关联查询

#等值连接  查询的是两张表交集的数据

#内连接   内连接和等值连接一样查询的都是两个表的交集数据

#外连接 外连接查询的是一张表的全部和另一张表的交集

#6.索引

#7.约束

#外键约束

#默认约束

#检查约束

#唯一约束

#非空约束

#主键约束

#函数


#概述

用来存储数据和管理数据的仓库,主要分成两类:关系型数据库 和 非关系型数据库

#安装

一路next,注意几个地方:端口号默认是3306,字符集改成utf-8,密码:root

sql是结构化查询语言,专门用来操作数据库的语言.是一种标准化语言,可以操作各种数据库产品.
分类:
1,DML : 数据操纵语言,是指对数据进行CRUD
2,DDL: 数据定义语言,是指创建的SQL语法
3,DCL: 数据控制语言,是指权限的分配
4,DQL: 数据查询语言,是指对数据的各种查询语法
常用操做:
对数据库的操作,对表的操作,对数据/记录的操作

#sql语句

创建数据库  create database 库名 default character set utf8;

查看所有数据库  show databases;

删除数据库 drop database 库名;

使用数据库  use 库名;

创建表 create table 表名(字段名 字段类型(字段最大长度),字段名 字段类型(字段最大长度)....);

查看所有表  show tables;

删除表  drop table 表名

查看表结构  desc 表名 

添加字段   alter table 表名 add column 列名 字段类型(字段长度);

查看所有表  select * from 表名;

插入数据  insert into 表名 values(100,'text','男');   值的个数、顺序和字段一致;

修改字段名  update 表名 set 字段名=新值;

删除数据  delete from 表名;

防止中文乱码 set names gbk;

导入sql脚本 source D:/demo.sql

开启事务  begin;

创建视图 create view 视图名 as select * from 表名 where条件

使用视图,就当做一张表来用  select * from 视图名

#事务

–1,概述
能保证多条SQL要么全成功要么全失败
4个特性:ACID
原子性:多个SQL处于同一个事务里,要么全成功要么全失败
一致性:保证数据在不同的电脑里是一致的
隔离性:数据库支持并发访问,保证事务间是隔离的,互不影响
持久性:对数据库的操作是永久的

–2,事务的隔离级别
读未提交:性能最好,数据的安全性最差
读提交:Oracle的默认的隔离级别 – 性能较好,安全性较差
可重复读:Mysql的默认的隔离级别 – 性能较差,安全性较好
串行化:安全性最高,但是表级的锁,效率低

#增删改查!!

#一、增:有2种方法

1.使用insert插入单行数据:

语法: insert into 表名 列名 values 值

例如:  insert into hero (name,sex,job) values ('亚索','男','中单');

2.使用insert,select语句将现有表中的 数据添加到已有的新表中

语法:insert into <已有的新表> <列名> select <原表列名> from <原表名>

例:insert into hero ('姓名','年龄','性别')select name,age,sex from user 

注意:查询得到的数据个数、顺序、数据类型等,必须与插入的项保持一致

#二、删:有2种方法

1.使用delete删除数据某些数据

语法:delete from <表名> [where <删除条件>]    

例:delete from hero where name='亚索'(删除表hero中列值为亚索的行)  

注意:删除整行不是删除单个字段,所以在delete后面不能出现字段名

2.使用truncate table 删除整个表的数据

语法:truncate table <表名>

例:truncate table hero

注意:删除表的所有行,但表的结构、列、约束、索引等不会被删除;不能用于有外建约束引用的表


#三、改 使用update更新修改数据

语法:update <表名> set <列名=更新值> [where <更新条件>]

例:update hero set age=18 where name='亚索'

注意:set后面可以紧随多个数据列的更新值(非数字要引号);where子句是可选的(非数字要引号),用来限制条件,如果不选则整个表的所有行都被更新

#四、 查

1.普通查询

语法:select <列名> from <表名> [where <查询条件表达试>] [order by <排序的列名>[asc或desc]]

#1).查询所有数据行和列

例:select * from hero

说明:查询hero表中所有行和列

#2).查询部分行列--条件查询

例:select name,age  from  hero   where id=1

说明:查询表hro中id=1的所有行,并显示name,age 2列

比较运算符 >  <  >=  <=  =  !=  <>

and类似java中的&&,同时满足多个条件的时候使用

or类似java中的||,满足一个条件的时候使用

数值计算 +   -    *    /     %   

#3).在查询中使用AS更改列名

例:select name as 姓名 from hero where  sex='男'

说明:查询hero表中性别为男的所有行,显示name列,并将name列改名为(姓名)显示

#4).查询空行

例:select name from hero where job is null

说明:查询hero表中job列为空的所有行,并显示name列;SQL语句中用is null或者is not null来判断是否为空行


#5).排序查询 (关键字: order by , asc ,desc)

例:  select name from hero where age>18 order by age desc

说明:  查询hero表中年龄大于18人的姓名升序排列 desc为升序关键字 默认为降序

#6).分页查询(关键字:limit 跳过的条数,请求的条数#每页的条数)

例子:   select name from hero where age>18 limit 0,3

说明:  limit跳过的条数(请求的页数-1)*每页的条数 

#7).去重查询 distinct

select distinct job from emp

说明: 查询emp表中的都有什么部门 distinct去掉重复的部门只显示一个

#2.模糊查询  _ 表示一个未知字符 %表示0或多个未知字符 

#1).使用like进行模糊查询  

例:select * from hero where name like '亚%'

说明:查询显示hero表中,name字段第一个字为亚的记录

#2).使用between在某个范围内进行查询

例:select * from hero where age between 18 and 20

说明:查询显示表hero中年龄在18到20之间的记录

#3).使用in在列举值内进行查询(in后是多个的数据)

例:select name from hero where id in (5,7,9)

说明:查询hero表中id值为5,7,9的记录,显示name字段

#3.分组查询

#1).使用group by进行分组查询

例:select AVG(age) as 平均年龄 from hero  group by job

说明:  查询hero表中每个job的平均年龄

 #2).使用having子句进行分组筛选

例:select  AVG(age) from hero  group by job  having count(age)>1

说明:接上面例子,显示分组后count()>1的行,由于where只能在没有分组时使用,分组后只能使用having来限制条件

#4.聚合函数

对查询的多条数据进行统计查询

1).平均值 avg(字段名)  select avg(sal) from emp where deptid=1;

2).最大值 max(字段名)  select max(sal) from emp where deptid=1;

3).最小值 min(字段名)  select min(sal) from emp where deptid=1;

4).求和  sum(字段名)  select sum(sal) from emp where deptid=1;

5).计数  count(*/字段名)  select count(sal) from emp where sal>2000;

#5.多表查询

#1).子查询  将一条sql的查询结果作为另一条sql条件的值

例:  select * from emp where sal> (select  avg(sal) from emp where deptid=1);

说明: 查询工资高于1号部门平均工资的员工信息

#2).关联查询

#等值连接  查询的是两张表交集的数据

格式: select * from A,B where 关联关系 and 其他条件

例:  select distinct loc from emp e,dept d where e.deptid=d.deptid and job='程序员'

说明:查询程序员的工作地点

#内连接   内连接和等值连接一样查询的都是两个表的交集数据

格式: select * from A join B on 关联关系 where 其他条件

select e.name from emp e join dept d on e.deptid=d.id where d.name='神仙' and job='销售'

#外连接 外连接查询的是一张表的全部和另一张表的交集

格式: select * from A left/right join B on 关联关系  where 其他条件

left join : join左侧的表是全部 ,右侧是交集

right join  :right右侧是表的全部,左侧是交集

查询所有员工的姓名和对应的部门名

select e.name ,d.name from emp e left join dept d on e.deptid=d.id 

#6.索引

好处:给加完索引的列,提高查询效率

坏处:索引本质上就是一张表,如果表的体积太大,比较占内存 主键本身就有索引、

分类:

单值索引(一个索引只包含着一个列)

复合索引(一个索引包含着多个列)

唯一索引(一个索引只包含着一个列,但是要求列的值不能相同)

1).创建普通索引 create index 索引名 on 表名(字段名)

2).查看索引 (观察三列:表名/字段名/索引名)  show index from dept

3).使用索引 explain select * from dept where dname like '%a%'

4).创建唯一索引 alter table 表名 add unique (字段名)

5).创建复合索引  alter table 表名 add index 索引名 (字段名,字段名...)

6).删除索引  alter table 表名 drop index 索引名

#7.约束

#外键约束

#外键约束
create table tb_user(
	id int primary key auto_increment,
	name varchar(20),
	age int
)
create table tb_user_addr(
	user_id int primary key auto_increment,
	addr varchar(200) ,
	#描述了两张表之间通过哪个字段关联着--外键约束
	#  外键    (子表的字段)   参考      主表名称(主表的字段)
	foreign key(user_id)    references   tb_user(id)
)

#默认约束

create table h(
	id int primary key auto_increment,
	sex char(3) default '女' #default设置默认值,给指定的字段设置默认值
)

#检查约束

create table i(
	id int primary key auto_increment,
	age int,
	check(age>0 and age<=150)#检查约束:给字段增加检查条件,符合才能操作,不符合不能操作
)

#唯一约束

#唯一约束:字段的值不能重复
create table g( name varchar(10) unique )

#非空约束

#非空约束:字段的值不能为空
create table e( name varchar(10) not null )

#主键约束

#主键约束自动递增,id的值不能重复,不能是null,而且自动递增
create table c(id int PRIMARY key auto_increment)

#函数

lower–全转小写
upper–全转大写
length–求长度
concat–拼接串
substr–截取字符串
replace–替换字符串
ifnull–对null元素的替换
round–对小数四舍五入
ceil–对小数向上取整
floor–对小数向下取整
now–获取当前的年月日时分秒
year–获取日期里的年
month–获取日期里的月
day–获取日期里的日
hour–获取日期里的时
minute–获取日期里的分
second–获取日期里的秒
转义字符 ’
————————————————

lower:全转小写 upper:全转大写   SELECT ename,empno,LOWER(ename),UPPER(ename) FROM emp

length:获取长度,一个字母或数字长度为1,一个汉字长度是3

SELECT dname,LENGTH(dname),loc,LENGTH(loc) FROM dept

#concat:拼接字符串,第一个参数是字段名,后面的参数都是要拼接的数据

SELECT dname,CONCAT(dname,'hello',123,789) FROM dept

#substr(1,2):截取字符串,1是字段名,2是从哪个字符开始

SELECT dname,SUBSTR(dname,3) FROM dept

#substr(1,2,3):1是字段名,2是从哪个字符开始,3是截取长度 SELECT dname,SUBSTR(dname,5,3) FROM dept

#replace(1,2,3):1是字段名,是要把2换成3

SELECT dname,REPLACE(dname,'a','666') FROM dept

#ifnull(1,2):1是字段名,判断1如果是null就换成2

SELECT comm,IFNULL(comm,200) FROM emp#计算月薪

SELECT sal,comm,sal+IFNULL(comm,0) FROM emp

SELECT sal,comm,sal+IFNULL(comm,0),sal*12+IFNULL(comm,0)*12 FROM emp

#round四舍五入, ceil向上取整 , floor向下取整 SELECT comm,ROUND(comm),CEIL(comm),FLOOR(comm) FROM emp

#日期函数 now当前时间 #year年 month月 day日 hour时 minute分 second秒

SELECT YEAR('2020-08-26'),MONTH(NOW()),DAY(NOW())

#转义符号\

SELECT 'xi\'an'     SELECT "xi'an"

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值