SQL的分类使用(增删改查)
1.SQL的分类使用(*代表重点的程度)
DDL ** (Data Definition Language)数据库定义语言
用来定义数据库对象: 库 表 列 等
DCL (Data Contorl Language)数据控制语言
用来定义访问权限 和 安全级别
DML ** (Data Manipulation Language)数据操作语言
用来定义数据库记录(数据):增 删 改
DQL *****(Data Query Language)数据查询语言
用来查询记录(数据): 查询
SQL的语法:
1.sql语句 以 英文 ; 号 作为一条语句的结束 所有符号必须都是英文
2.sql大小写区分问题 (表名 列表)
windows 不区分大小写
unix/linux 区分大小写
1.1 DDL 用来定义数据库对象: 库 表 列
关键字 create / alter / drop
对数据库的操作:
cmd ---> 进入数据库 mysql -u root -p -->输入密码 出现welcome...证明登录成功
1.1.1 查询
查看当前数据库服务器中 有几个库
show databases;
查看前面创建的数据库定义信息
show create database 数据库名;
1.1.2 创建
create database 数据库名;
create database 数据库名 character set utf8; 创建数据库 并设置字符集
1.1.3 修改
修改数据库编码集
alter database 数据库名 character set gbk;
1.1.4 删除
drop database 数据库名;
1.1.5 其他
查看当前正在使用的数据库
select database();
切换数据库
use 数据库名;
查看当前库下所有的表
show tables;
对表的操作:
1.1.6 创建
create table 表名(
字段名1 字段类型 约束条件,
字段名2 字段类型 约束条件,
字段名3 字段类型 约束条件,
.....
字段名N 字段类型 约束条件
)
字段名 -->表头
字段类型 ---> 规定列可以存储的数据类型是什么
约束条件 ---> 可省略不写
MySQL中的常用数据类型:
int 整型
float 浮点型 double 浮点型
float(5,2) 表示最多可5位 其中 必须有2位是小数
999.99
decimal 用来存储工资 从MySQL 5.1之后才有
char 固定长度的字符串类型 char(10) 'aaa '占10位
varchar 可变长度字符串类型 varchar(10) 'aaa' 占3位
text 字符串类型 超长
blob 字节类型
date 日期类型 格式为 yyyy-MM-dd
time 时间类型 格式为 HH:mm:ss
timestamp 时间戳类型 yyyy-MM-dd HH:mm:ss 会自动赋值 会自动赋值当前时间
datetime 时期类型yyyy-MM-dd HH:mm:ss
1.1.7 修改
alter 修改表的字符集
alter table 表名 character set 字符集;
change 修改列名 用来给字段重命名 不能修改字段的类型 和 约束
alter table 表名 change 旧字段名 新的字段名 数据类型
modify 修改列属性 只能修改类型和约束条件
alter table 表名 modify 字段名 字段类型
修改表名
alter table 原表名 rename 新表名
rename table 原表名 to 新表名
1.1.8 删除
drop table 表名
1.1.9 查看
查看数据库中的表结构
desc 表名;
查看创建表的语句
show create table 表名
查看数据库中所有的表
show tables;
对字段的操作:
新增字段
alter table 表名 add 新增的字段名 字段类型
删除字段
alter table 表名 drop 字段名
1.2 DCL (Data Contorl Language)数据控制语言
用来定义访问权限 和 安全级别
主要包括 创建用户 / 给用户授权 / 对用户撤销授权 / 删除用户
需要使用root 登录 才可以
1.2.1 创建用户
create user 用户名@xxx identified by '密码';
xxx 表示创建的用户 使用ip地址
可以设置为 localhost 代表本机
或者 % 代表允许所有ip地址登录
1.2.2 给用户分配权限
grant 权限1,权限2....权限n on 数据库.* to 用户名@xxx;
如果想要将数据库所有操作权限全都授予用户
all
grant all on 数据库.* to 用户名@xxx;
1.2.3 撤销授权
revoke 权限1,权限2....权限n on 数据库名.* from 用户名@xxx;
1.2.4 查看用户的权限
show grants for 用户名@xxx;
1.2.5 删除用户
drop user 用户名@xxx;
1.3 DML
不要与 DDL 混淆 增删改对表中的数据进行操作
insert 增加
update 修改
delete 删除//delect删除不了约束,就是auto——increament的默认的值
注意:
在mysql中 字符串类型 和 日期类型 都要使用引号 引起来 '' ""
用来操作数据
1.3.1 insert 增加 插入
insert into 表名(列名1,列名2....列名n) values(值1,值2...值n)
注意:
1. 列名 可省略 但是在插入数据的时候和表结构完全一致
2. 列名 和 值 的类型/个数/顺序 必须一致
3. 如果插入 空值 请使用 null
4. 日期类型 可以使用- , . 分割 或者不分割 "2018-3-12"
5. 同时可以插入多条数据(值1,值2...值n),(值1,值2...值n),(值1,值2...值n)....
1.3.2 update 修改
update 表名 set 列名1=值1,列名2=值2.... where 列名=值
注意:
1.where子句 可省略
写 就是修改符合条件的那个
如果不写 就是修改当前表中的所有记录
1.3.3 delete 删除
delete from 表名 where 列名=值
注意:
1.where子句 可省略
写 就是删除符合条件的那个
如果不写 就是删除表中所有的记录
删除表中所有记录
delete from 表名
删除表中的数据 表结构还在 删除后 数据可找回
truncate table 表名//truncate后面不能有条件能删除约束
删除是直接把表drop掉
然后创建一个同样的新表
删除后 数据不能找回 执行速度比delete快
1.4 DQL 数据查询语言 非常重要
select
select 列名 from 表名 where --> group by --> having --> order by --> limit
where --> group by --> having --> order by --> limit 可不写
数据库执行DQL语句 不会对数据进行改变
而是让数据库发送结果集 返回给客户端
查询返回的结果 是一张虚拟表
* 是查询所有列 实际开发中尽量少用
只要获取想要的列就可以了
select 列名 /*要查询的结果 列*/
from 表名 /*要查询的表名称 (多张表联合查询)*/
where 行条件
group by 对结果进行分组
having 分组后的行条件
order by 对结果的排序
limit 从x开始,取N个 结果限定
基础查询
1.查询所有列 select * from 表名
2.查询指定列 select 列名1,列名2... from 表名
条件查询
条件车讯 是在查询时 给出where 子句
在where子句中 可以给出一些关键字来用作条件匹配
将符合条件的数据查询出来
符号
> < != <> = >= <=
between...and.. 两者之间 >= <= 包含边界
in 在xxx范围内
is null 是空的
and 和
or 或者
not 非
SELECT * FROM stu WHERE age BETWEEN 20 AND 75;
SELECT * FROM stu WHERE age >=20 AND age<=75;
/*性别是女的 并且 年龄 小于30*/
SELECT * FROM stu WHERE gender='female' AND age<30;
/*查询 sid是 S_1002 或者 性别为男的*/
SELECT * FROM stu WHERE sid='S_1002' OR gender='male';
/*查询性别是null的记录*/
SELECT * FROM stu WHERE gender IS NULL;
/*查询性别 非男的*/
SELECT * FROM stu WHERE gender !='male';
SELECT * FROM stu WHERE gender <>'male';
SELECT * FROM stu WHERE NOT gender ='male';
/*模糊查询*/
like
通配符
% 任意0-n个字母
_ 任意一个字母
/*查询学生名字 有五个字母组成的记录 结尾是 i组成*/
SELECT * FROM stu WHERE sname LIKE "____i";
SELECT * FROM stu WHERE sname LIKE "__";
/*查询名字 以w开头*/
SELECT * FROM stu WHERE sname LIKE "w%";
/*查询名字中 包含a的*/
SELECT * FROM stu WHERE sname LIKE "%a%";
/*字段控制查询*/
1.去除重复记录
distinct
/*去除重复*/
SELECT DISTINCT sname FROM stu;
2.判断列的值是否是空
IFNULL(列名,值) 用指定值 替换 null
/*查看 员工 薪资 和 奖金的和*/
SELECT *,sal+IFNULL(comm,0) AS total FROM emp;
3.AS 起别名
可以给 列 / 表 起别名
AS关键字可不写
原名 as 别名
/*排序 order by*/ 根据xx来进行排序 默认是升序的
asc 升序
desc 降序
/*根据学生年龄 升序 / 降序*/
SELECT * FROM stu ORDER BY age DESC;
/*获取员工信息 先按照工资升序 然后按照奖金 降序*/
SELECT * FROM emp ORDER BY sal ASC,comm DESC;
升序和降序可在一起使用(先紧着第一个,相同看后一个)一般在日期中使用
/*聚合函数*/
sum avg max min count
用来做纵向运算的函数
count() 统计指定列 不为null 的行数
max()/min() 最大最小值
sum() 求和
avg() 平均数
聚合函数 不能放在where子句里
聚合函数 是针对结果集进行的
where条件并不是在查询出结果之后才运行的
所以放在where语句中 会报错
sql语句的执行过程
from-->where-->group by-->having-->select-->order by-->limit
count()
/*查询表中记录数*/
SELECT COUNT(*) FROM emp;
/*查询emp表中 有奖金的人数*/
SELECT COUNT(comm) FROM emp;
/*查询 月薪 与 奖金之和 大于>2500的人数*/
SELECT COUNT(*) FROM emp WHERE sal + IFNULL(comm,0)>2500;
/*分组查询*/
group by 当需要分组查询的时候 就是用 group by 子句
理解为 "根据(by)一定的规则进行分组(group)"
/*having*/
where 是先过滤 后分组
having 先分组 再过滤
having 和 where 的区别
1.having 是在分组后 对数据进行过滤
where 是在分组前 对数据进行过滤
2.having后面可以使用聚合函数
where后面不可以
where是对分组前 记录的条件 如果某行记录 没有满足where条件 将不会参与分组
having是对分组后的数据进行筛选
/*查询 工资总和 大于9000 的部门编号 以及 工资和*/
SELECT deptno,SUM(sal) FROM emp GROUP BY deptno HAVING SUM(sal)>9000;
/*错误写法 查询 工资总和 大于9000 的部门编号 以及 工资和*/
SELECT deptno,SUM(sal) FROM emp WHERE SUM(sal)>9000 GROUP BY deptno;
/*limit*/ 用来限定查询结果的起始行 以及总行数
从哪儿开始 取几个
/*查询五行记录 从第几行开始 起始行是0 0代表第一行 */
SELECT * FROM emp LIMIT 5,5;
分页查询
35条记录需要分页显示
1.需要获取 总行数 count() = 35
2.确定每一页要显示的数量 pageSize = 10
3.确定一共分多少页
page = count%pageSize==0?count/pageSize:count/pageSize + 1
4.
第一页 起始行 0 一共查询10
select * from xx limit 0,10
第二页 起始行 10~19
select * from xx limit 10,10
第三页 起始行 20~19
select * from xx limit 20,10
...
每页的起始行 = (页码-1)*pageSize
=============条件语句运算符===============
==============条件语句运算符优先级====================
**************************
查询语句书写顺序:
select -- from -- where -- group by -- having -- order by -- limit
查询语句执行顺序:
from -- where -- group by -- having -- select -- order by -- limit
SQL的分类使用(增删改查)的更多相关文章
- MVC无限级分类02,增删改查
继上一篇"MVC无限级分类01,分层架构,引入缓存,完成领域模型与视图模型的映射",本篇开始MVC无限级分类的增删改查部分,源码在github. 显示和查询 使用datagrid显 ...
- SQL语法之初级增删改查
SQL语法之初级增删改查 1.增 1.1插入单行 INSERT INTO [表名](列名) VALUES(列值) 语法如下: INSERT INTO bsp_Nproductclass(guid,pi ...
- SQL学习之简单增删改查
SQL最常用的语句,就是增删改查: 增删改查的对象,分别是库(文件夹),表(文件),表的内容(表的记录): 一.创建一个基本的表 #create table Student_Info (Name VA ...
- Python 模拟SQL对文件进行增删改查
#!/usr/bin/env python # _*_ coding:UTF-8 _*_ # __auth__: Dalhhin # Python 3.5.2,Pycharm 2016.3.2 # 2 ...
- SQL简单语句(增删改查)
简单的SQL语句增删改查操作 说明: 在mysql里面亲测结果正确 用到的表(学生表:studnets) 1.创建一个学生表,(学号,姓名,性别,家庭住址) mysql> create t ...
- VS连接SQL Server数据库,增删改查详细教程(C#代码)_转载
工具: 1.Visual Studio (我使用的是vs2013) 2.SQL Server (我使用的是sql server2008) 操作: 1.打开SQL Server,打开后会看到数据库的初 ...
- SQL server数据类型、增删改查
数据类型: 整数型:bigint.int.smallint.mediumint.tinyint 小数类型:decimal.numeric 浮点型:real.float.double 位型:bit 字符 ...
- SqL语句基础之增删改查
增查删改的SQL语句,如此的实用,下面我就来简单介绍一下它简单的用法. 1.什么是SQL? SQL是用于访问和处理数据库的标准的一种计算机语言. 2.SQL可以做什么? (1)可以向数据库进行查询 ...
- SQL数据库中的增删改查总结1
一.增:有2种方法 1.使用insert插入单行数据: 语法:insert [into]<表名> [列名] values <列值> 例:insert into Strdents ...
- mybatis反向生成sql,基本的增删改查
用到的几个文件 MyBatisGeneratorProxy.java package com.timestech.wsgk.test.tools; import static org.mybatis. ...
随机推荐
- 使用document.domain+iframe跨域实例
首先我们假设主页面地址为:http://www.js8.in/mywork/crossdomain/index.html,我们要加载的内容是位于work.2fool.cn域名下的helloworld. ...
- 部署描述符web.xml
部署描述符应用场景 需要传递初始参数给ServletContext 有多个过滤器,并要指定调用顺序 需要更改会话超时设置 要限制资源的访问,并配置用户身份验证方式 xsi:schemaLocation ...
- http概述——http笔记一
之前想深入的了解学习下HTTP,所以就买了本砖头<HTTP权威指南>.最近一直在看,可是发现看书只有输入并没有输出,不行.所以就打算把自己的理解写成一系列的笔记,供以后翻阅. 大概画了张本 ...
- XML转换
找到两个不错的c#的关于XML转string和将string格式化XML输出 感谢以下两位的分享: [string格式化XML输出]http://blog.csdn.net/a497785609/ar ...
- python爬虫之Appium手机APP爬虫
一.Appium工作原理(详情见:https://www.cnblogs.com/sophia194910/p/7515165.html) Appium的功能其实很简单:监听一个端口,然后接收由cli ...
- 聊一聊MyBatis 和 SQL 注入间的恩恩怨怨
整理了一些Java方面的架构.面试资料(微服务.集群.分布式.中间件等),有需要的小伙伴可以关注公众号[程序员内点事],无套路自行领取 更多优选 一口气说出 9种 分布式ID生成方式,面试官有点懵了 ...
- springboot 解决实体类值为null或者数组为空,不返回前台
一个注解解决问题 @JsonInclude(JsonInclude.Include.NON_EMPTY) @JsonInclude(JsonInclude.Include.NON_NULL)
- JUC-八锁现象和不安全锁
1,被 synchronized 修饰的方法,锁的对象是方法的调用者(实例对象) 2,被 static 修饰的方法,锁的对象就是 Class模板对象,这个则全局唯一 问题7: 一个普通同步方法,一个静 ...
- 绕过Referer和Host检查
1.我们在尝试抓取其他网站的数据接口时,某些接口需要经过请求头中的Host和Referer的检查,不是指定的host或referer将不予返回数据,且前端无法绕过这种检查 此时通过后端代理解决 在vu ...
- iview 和 Elemet UI 源码比较
(近期给自己立了个小flag,读源码,每周至少读1篇源码) 下面来谈谈iview 和 Elemet UI 这两个基于Vue 的UI 框架源码的基本结构以及区别. 一.文件结构开发主要放在根文件夹下的s ...