Mysql基础操作语句
SQL
简单的增删改查
不区分大小写, 表名和字段名可不加引号
查询语句
SELECT * FROM `table_name`;
-- 注释 CTRL+/ : 注释 CTRL+/ :
取消注释 /* */ : 多行注释
创建表和字段
CREATE TABLE `table_name`(
`name` VARCHAR(20),
`age` int,
`sex` VARCHAR(10)
);
创建表和字段(添加ID字段,加主键)
CREATE TABLE `table_name`(
`id` INT UNSIGNED PRIMARY KEY AUTO_INCREMENT,
`name` VARCHAR(20),
`age` INT,
`height` DECIMAL(5,2)
);
在表中插入行
alter table 表名 add column 字段名 varchar(50) after/before 字段名;
删除表
1. DROP TABLE `table_name`; -- 如果表不存在语句会报错
2. DROP TABLE IF EXISTS `table_name`; -- 表不存在也不会报错
添加一行数据
1. 所有字段都设置值
INSERT INTO `table_name` VALUES (值, 值, 值);
2. 单独字段设置值
INSERT INTO table_name(col_name) VALUES (值);
INSERT INTO table_name(col_name, col_name) VALUES (值, 值);
3. 插入多行
insert into table_name values (...), (...), (...)...
修改数据
update table_name set col_name=value, col_name=value, col_name=value where 条件;
删除数据
1. delete from table_name where 条件; -- 不加条件删除所有数据, 保留表结构
2. truncate table table_name; -- 删除表中所有数据, 保留表结构
- truncate和delete删除所有数据时, 当id自增时, 继续添加数据, delete删除的数据从之前的自增继续自增, truncate删除的数据从1开始自增
- 速度上, drop > truncate > delete
- 逻辑删除: 设置标志位, 不实际删除数据, 只是标志该数据被删除
数据操作
查询所有字段
selete * from 表名;
查询部分字段
select 字段1, 字段2, 字段3 from 表名;
起别名
1. 给表起别名
select 别名.字段1, 别名.字段2 from 表名 as 别名;
2. 给字段起别名
select 字段1 as 别名, 字段2 as 别名 from 表名;
起别名时as可以省略, 但是不建议省略, 别名只在查询结果中起作用, 表本身不受影响
去重
select distinct 字段1, 字段2 ... from 表名;
eg:
select count(distinct 字段) from 表名; -- 去重后统计数量
结果中一行记录和另一行记录完全一样, 才算是重复数据
条件查询
使用where子句对表中的数据进行筛选
1. select 字段 from 表名 where 条件;
条件运算符: =, <, >, >=, <=, !=, <>
逻辑运算符: and, or, not
模糊查询
关键字: like , %代表多个任意字符, _代表一个任意字符
select * from 表名 where 字段名 like 条件;
范围查询
关键字: in, between...and...
1. select * from 表名 where 字段名 in(条件,条件,条件);
2. select * from 表名 where 字段名 between 条件1 and 条件2;
3. select * from 表名 where 字段名 not in(条件,条件,条件);
4. select * from 表名 where 字段名 not between 条件1 and 条件2;
between...and... -> 条件1要小于等于条件2
空判断
关键字: is , null是空,''是空字符串
select * from 表名 where 字段名 is null;
select * from 表名 where 字段名 is not null;
排序
1. select * from 表名 order by 字段 asc | desc, 字段 asc | desc;
2. select * from 表名 order by convert(字段 using gbk);
asc可以省略, 默认升序, 多个字段排序按顺序排序
默认排序是排序数字和字母, 中国默认按照文字编码排序, 可使用convert(), 按开头字母排序
聚合函数
常用聚合函数: count(), max(), min(), sum(), avg()
count函数内可以写*, 也可以写某一列, 如果有null, 不会统计在内
聚合函数不能用在where子句后面
分组
目的: 对每一组数据进行统计
select 字段,聚合函数() from students group by 字段;
eg:
select class, max(age), min(age), avg(age) from students group by class;
按照某个字段分组后, select后只能写聚合函数和分组那个字段的名称
分组后的数据筛选
select 字段,聚合函数() from students group by 字段 having 条件(聚合);
eg:
select sex, count(*) from students group by sex having count(*)>5;
where和having对比
- where是对from后面指定的表进行数据筛选, 属于对原始数据的筛选
- having是对group by的结果进行筛选
- having后面的条件中可以使用聚合函数, where不可以
获取部分行(分页)
关键字: limit , 当数据量过大时, 需要分页查询
select * from 表名 limit start,count;
start(索引) : 从0开始, 拿count条, start可省略, 默认0, count可超过实际数量
select .... from 表名 .....;
组合查询使用顺序:
where
group by
order by
limit
连接查询
内连接
select * from 表1 inner join 表2 on 表1.列 = 表2.列;
扩展语法(不建议使用, 效率低):
select * from 表1,表2 where 表1.列 = 表2.列;
eg:
select * from students stu inner join scores sc on stu.studentno = sc.studentno inner join courses cs on sc.courseno=cs.courseno;
eg:
select stu.name 姓名, cs.name 课程, score 成绩 from students stu
inner join scores sc on stu.studentno = sc.studentno
inner join courses cs on sc.courseno=cs.courseno
where stu.name='诸葛亮' order by score desc;
连接条件最重要的是on后面的条件, 内连接只显示匹配成功(交集)的结果
左连接
select * from 表1 left join 表2 on 表1.列 = 表2.列;
左连接是以左表为主表, 里面所有数据全部显示, 右表没有对应表数据时以null补全
右连接
select * from 表1 right join 表2 on 表1.列 = 表2.列;
右连接是以右表为主表, 里面所有数据全部显示, 左表没有对应表数据时以null补全
自关联
自己连接自己, 数据拥有层级关系时使用
select * from 表 别名 inner join 表 别名 on 条件;
eg:
select * from areas a1
inner join areas a2 on a1.aid=a2.pid
where a1.atitle='河南省';
子查询
一个select语句里嵌套一个select语言, 主查询, 子查询
- 子查询嵌入到主查询中
- 子查询是辅助主查询的, 充当条件或者充当数据源
- 子查询是可以独立存在的语句, 是一条完整的select语句
标量子查询: 子查询结果只有一行一列
列子查询: 子查询结果有一列多行
行子查询: 子查询结果有一行多列
表子查询: 充当数据源, 充当数据源时, 必须要起别名
eg:
select * from students where age=(select min(age) from students);
Mysql基础操作语句的更多相关文章
- 【MySQL】MySQL基础操作语句
mysql基础操作语句,包括数据库的增.删.切换,以及表的增.删.改.查.复制. 创建数据库 mysql> create database tem; 使用数据库 mysql> use te ...
- PHP之路——MySql基础操作语句
1,创建数据库,create datebase 数据库名,在这里kenan建立一个数据库名为myfirstdb create database myfirstdb; 2,查看所有的数据库 show d ...
- MySQL基础操作&&常用的SQL技巧&&SQL语句优化
基础操作 一:MySQL基础操作 1:MySQL表复制 复制表结构 + 复制表数据 create table t3 like t ...
- MySQL数据库基础操作语句
SQL语言主要用于存取数据.查询数据.更新数据和管理关系数据库系统,分为3种类型: 1.DDL语句 数据库定义语言: 数据库.表.视图.索引.存储过程,例如CREATE DROP ALTER 2.DM ...
- MYSQL基础操作
MYSQL基础操作 [TOC] 1.基本定义 1.1.关系型数据库系统 关系型数据库系统是建立在关系模型上的数据库系统 什么是关系模型呢? 1.数据结构可以规定,同类数据结构一致,就是一个二维的表格 ...
- MYSQL 基础操作
1.MySQL基础操作 一:MySQL基础操作 1:MySQL表复制 复制表结构 + 复制表数据 create table t3 like t1; --创建一个和t1一样的表,用like(表结构也一样 ...
- mysql数据库优化课程---13、mysql基础操作
mysql数据库优化课程---13.mysql基础操作 一.总结 一句话总结:mysql复制表,索引,视图 1.mysql如何复制表? like select * 1.复制表结构 create tab ...
- MySQL基础操作(二)
MySQL基础操作 一.视图 视图是一个虚拟表(非真实存在),其本质是[根据SQL语句获取动态的数据集,并为其命名],用户使用时只需使用[名称]即可获取结果集,并可以将其当作表来使用.注意:使用视图时 ...
- mysql常用操作语句
mysql常用操作语句 1.mysql -u root -p 2.mysql -h localhost -u root -p database_name 2.列出数据库: 1.show datab ...
随机推荐
- 【原创】如何设置Virtual Box虚拟机CentOS7为静态IP地址
如何设置Virtual Box虚拟机CentOS7为静态IP地址 最近要搭建一个Kubernetes集群,需要设置虚拟机为静态IP地址不变.翻了一些资料,参差不齐,有些也比较过时了.自己实测总结了一下 ...
- 【最新最全】为 iOS 和 Android 的真机和模拟器编译 Luajit 库
编译 Luajit 库,的确是一个挑战.因为官网的教程,在当前版本的 Xcode 和 NDK 环境中,已经不适用了.以前只是编译了适用于真机的 Luajit 库.最近在尝试编译模拟器 Luajit 库 ...
- 传递的值是this,在js里就不用再写$(this)
<input class="editinput" value="${detail.earlymoneyrmb}" name="earlymone ...
- 关于javascript中call()和apply()方法的总结
前段时间在使用javascript的过程中遇到了继承的问题,自己顺便就对call()和apply()方法进行了了解. 两个方法的共同之处:这两个方法作用相同,都用来改变当前函数调用的对象,即改变thi ...
- CF451E Devu and Flowers(组合数)
题目描述 Devu想用花去装饰他的花园,他已经购买了n个箱子,第i个箱子有fi朵花,在同一个的箱子里的所有花是同种颜色的(所以它们没有任何其他特征).另外,不存在两个箱子中的花是相同颜色的. 现在De ...
- #leetcode刷题之路41-缺失的第一个正数
给定一个未排序的整数数组,找出其中没有出现的最小的正整数.示例 1:输入: [1,2,0]输出: 3示例 2:输入: [3,4,-1,1]输出: 2示例 3:输入: [7,8,9,11,12]输出: ...
- Delphi Android USB Interface with the G2
来源:http://www.bverhue.nl/g2dev/?p=65 Delphi Android USB Interface with the G2 Leave a reply I first ...
- 飞控入门之C语言结构体、枚举
结构体 先来说明一下,结构体存在的意义.比如说有一只猫,要在C语言程序中综合描述它,那么可以这样说,它的体重是float类型的,颜色是char类型的,它的一些食物名字是一个数组,那么如果分开定义这些变 ...
- Synchronized关键字与多线程
在java中,每一个对象有且仅有一个同步锁.这也意味着,同步锁是依赖于对象而存在.当我们调用某对象的synchronized方法时,就获取了该对象的同步锁.例如,synchronized(obj)就获 ...
- Android Log类基本用法
Log类介绍: API for sending log output.Generally, use the Log.v() Log.d() Log.i() Log.w() and Log.e() me ...