Structured Query Language(
结构化查询语言)
的缩写。SQL
是专为数据库而建立的操作命令集,是一种功能齐全的数据库语言<1> 在数据库系统中,SQL语句不区分大小写(建议用大写) 。但字符串常量区分大小写。建议命令大写,表名库名小写;
<2> SQL语句可单行或多行书写,以“;”结尾。关键词不能跨多行或简写。
<3> 用空格和缩进来提高语句的可读性。子句通常位于独立行,便于编辑,提高可读性。
1 2 | SELECT * FROM tb_table WHERE NAME="YUAN"; |
<4> 注释:
单行注释:--
多行注释:/*......*/
<5>sql语句可以折行操作
1、mysql的常用sql语句:
a.库的操作
1.创建数据库:
create database 库名 [character set utf8(指定字符集,不加默认为拉丁文)];
2.查看数据库
show databases; 查看所有数据库
show create database 库名; 查看数据库的创建信息
use 库名; 切换到指定数据库
select database(); 查看当前所在的库
3.修改数据库(修改字符集)
alter database 库名 [character set utf8(指定字符集,不加默认为拉丁文)];
4.删除数据库
drop database 库名;
b.表的操作
1.创建表
create table 表名 (
字段 类型[完整性约束条件],
字段 类型[完整性约束条件]
);
2.查看表信息
show tables; 查看当前库中所有的表
show create table 表名; 查看表的建表语句
desc 表名; 查看表结构
show columns from 表名; 同上,查看表结构
3.修改表结构
alter table 表名(
add 字段 类型[完整性约束条件] [first|after 字段名], #增加字段
modify 字段 类型[完整性约束条件] [first|after 字段名], #修改字段类型
change 旧字段 新字段 类型[完整性约束条件][first|after 字段名] #修改字段名
drop 字段; #删除一列字段
);
rename table 旧表名 to 新表名; 修改表名
4.删除表
drop table 表名; 删除表
c.表记录的操作
1.增加表记录
增加一条记录:
insert [into] 表名 (字段1,字段2,…) values (值1,值2,…);
增加多条:
insert [into] 表名 (字段1,字段2,…) values (值1,值2,…),
(值1,值2,…),
…… ;
set插入:
insert [into] 表名 set 字段1=值2,字段2=值2;
2.修改表记录
update 表名 set 字段1=值1 where子句
3.删除表记录
delete from 表名 where 子句;
清空表内所有记录有两种方法:
方式1:
delete from 表名;
方式2:
truncate table 表名;
对比:
delete语句只能删除表中的内容,不能删除表本身,想要删除表,用drop
truncate也可以删除表中的所有数据,语句首先会摧毁表,再新建表,此种方式删除的数据不能在事务中恢复,数据量大时推荐使用
4.查询表记录
select * from 表名; #显示所有的记录信息
select 字段1,字段2,… from 表名
where 子句 #过滤查询
group by 字段 #分组查询
having 子句 #过滤
order by 字段 #排序
limit #记录条数限制
Mysql在执行sql语句时的执行顺序:
from > where > select > group by > having > orderby
(1)where 子句:
比较运算符:
> < >= <=<> !=
between 80 and 100 值在10到20之间
in(80,90,100) 值是10或20或30
like ‘yuan%‘ (%后面可以接_,代表匹配一个字符,可以接多个)
逻辑运算符
在多个条件直接可以使用逻辑运算符 and or not
(2)group by 字段:
GROUP BY 语句根据某个列对结果集进行分组,在分组的列上我们可以使用聚合函数进行相关查询
count 计数
sum 总数值
avg 平均值
max 最大值
min 最小值
(3)having 子句
过滤
与where 子句的区别:
在sql语句中,两者的书写顺序和执行顺序不一样,where写在前面,先执行,having写在后面,后执行,having适用于对查询结果的二次过滤
(4)order by 字段
按指定的列进行排序,排序的列即可是表中的列名,也可以是select语句后指定的别名
语法:select*|field1,field2... from tab_name order by field [Asc|Desc]
-- Asc 升序、Desc 降序,其中asc为默认值 ,ORDER BY 子句应位于SELECT语句的结尾。
(5)limit记录条数限制
(6)正则表达式
练习:
先创建一个员工表:
create table emp(
id int primary keyauto_increment,
name varchar(20),
gender enum("male","female","other"),
age tinyint,
dep varchar(20),
city varchar(20),
salary double(7,2)
);
表内插入信息:
insert into emp(name,gender,age,dep,city,salary) values
("yuan","male",24,"教学部","河北省",8000),
("egon","male",34,"保安部","山东省",8000),
("alex","male",28,"保洁部","山东省",10000),
("景丽阳","female",22,"教学部","北京",9000),
("张三", "male",24,"教学部","河北省",6000),
("李四", "male",32,"保安部","北京",12000),
("王五", "male",38,"教学部","河北省",7000),
("赵六", "male",19,"保安部","河北省",9000),
("猪七", "female",24,"保洁部","北京",9000);
查看表记录信息:
mysql> select * from emp;
+----+--------+--------+------+--------+--------+----------+
| id | name | gender | age | dep | city | salary |
+----+--------+--------+------+--------+--------+----------+
| 1| yuan | male | 24| 教学部 | 河北省 | 8000.00 |
| 2| egon | male | 34| 保安部 | 山东省 | 8000.00 |
| 3| alex | male | 28| 保洁部 | 山东省 | 10000.00 |
| 4| 景丽阳 | female| 22 | 教学部 | 北京 | 9000.00 |
| 5| 张三 | male | 24 | 教学部 | 河北省 | 6000.00 |
| 6| 李四 | male | 32 | 保安部 | 北京 | 12000.00 |
| 7| 王五 | male | 38 | 教学部 | 河北省 | 7000.00 |
| 8| 赵六 | male | 19 | 保安部 | 河北省 | 9000.00 |
| 9| 猪七 | female | 24 | 保洁部 | 北京 | 9000.00 |
+----+--------+--------+------+--------+--------+----------+
查询语句实例:
查询所有name、salary字段的值
select name,salary from emp;
查询所有name、salary字段的值并设置别名
select name as 姓名,salary as 薪水 from emp; #as可以省略不写
where 子句
查询所有年龄大于20的: