Sql语句
-
Sql的语法
- 每条语句以分号结尾(命令行里面需要),如果在navicat,java代码中不是必须加的
- SQL在window中不区分大小写,关键字中认为大写和小写是一样的 -
Sql的分类
- Data Definition Language (DDL数据定义语言) :操作数据库,操作表
- Data Manipulation Language(DML数据操纵语言):对表中的记录操作增删改
- Data Query Language(DQL 数据查询语言):对表中的查询操作
- Data Control Language(DCL 数据控制语言):对用户权限的设置
DDL 操作数据库
语法:
create database 数据库名 [character set 字符集] [collate 校对规则]
注: [ ] 意思是可选的意思
-- 创建一个student数据库
create database student;
-- 创建一个teacher的数据库,指定字符集为gbk
create database teacher character set gbk;
查看所有数据库_
-- 查看所有数据库
show databases;
删除数据库_
-- 删除数据库
drop database 数据库名
-- 删除student数据库
drop database student;
修改数据库_
-- 修改数据库
alter database 数据库名 character set 字符集
-- 把teacher的字符集改为utf-8
alter database teacher character set utf8;
切换数据库_
-- 切换数据库
use 数据库名
-- 使用teacher数据库
use teacher;
查看正在使用的数据库_
-- 查看正在使用的数据库
select database();
DDL 操作表
- 表的数据类型
- int / bigint
- float / double
- char / varchar (char 固定长度 varchar 可变长度)
- date / datetime (date 日期 datetime 日期和时间)
约束 | 约束关键字 |
---|---|
主键 | primary key |
唯一 | unique |
非空 | not null |
约束各类_
- not null:非空 username varchar(40) not null; username这个列不能有null值
- unique:唯一约束, 后面的数据不能和前面重复cardNo char(18) unique; cardNo 列里面不可以有重复数据
- primary key:主键约束(非空+唯一) 一般用在表的id列上面. 一张表基本上都有id列的, id列作为唯一标识的
- auto_increment:自动增长,必须是设置了primary key之后,才可以使用auto_increment
创建表_
create table 表(
列 类型 [约束],
列 类型 [约束]
...
);
-- 创建一张学生表
create table student(
id int primary key auto_increment,
name varchar(40),
sex int
);
-- 给学生表增加一个grade字段
alter table student add grade varchar(20) not null;
-- 把学生表的sex字段改成字符串类型
alter table student modify sex varchar(10);
-- 把学生表的grade字段修改成class字段
alter table student change grade class varchar(20);
-- 把class字段删除
alter table student drop class;
-- 把学生表修改成老师表
rename table student to teacher;
删除表_
-- 删除表
drop table 表名
-- 把teacher表删除
drop table teacher;
DML 操作表记录(对增删改)
插入数据_
-- 插入指定列 如果没有把这个列进行列出来, 以null进行自动赋值(如果没有插入了列设置了非空约束, 会报错)
insert into student(name,sex) values ('张三','男');
-- 插入所有的列
insert into student values (null,'李四','女');
更新记录_
语法:
update 表 set 列 =值, 列 =值 [where 条件]
-- 把张三改为小马
update student set name = '小马' where name = '张三';
-- 把小马的年龄加二
update student set age = age + 2 where name = '小马';
删除记录_
语法:
delete from 表 [where 条件]
-- 把name为小马的记录删除
delete from student where name = '小马';
-- 删除表中所有记录
delete from 表名
DQL操作表记录(查询)
基本查询语法:
select [*] [列名 ,列名] [列名 as 别名 ...] [distinct 字段] from 表名 [where 条件]
简单查询_
-- 查询所有的列的记录
select * from 表名
-- 查询student表的所有列的记录
select * from student;
查询某张表特定列的记录_
-- 查询某张表特定列的记录
select 列名,列名,列名... from 表
-- 查询student表中name例的记录
select name from student;
去重查询_
-- 去重查询
select distinct 字段名 from 表名
-- student表name去重查询
select distinct name from student;
别名查询 _
-- 别名查询
select distinct 字段名 as 别名 from 表名
-- student表别名查询
select 别名.* from 表 as 别名
-- student表name别名查询
select distinct name as n from student;
运算查询(+,-,x,/等)_
-- 把name为小马的年龄加2并查询
select age + 2 from student where name = '小马';
条件查询_
语法:
select ... from 表 where 条件
// 取出表中的每条数据,满足条件的记录就返回,不满足条件的记录不返回
-- 把age大于10的记录取出
select * from student where age > 10;
区间查询_
语法:
between...and...
-- 把age在10到30之间的数取出
select * from student where age between 10 and 30;
语法:
in(值1,值2...)
-- 把age为19,18的值取出
select * from student where age in (19,18);
语法:
like
(模糊查询:一般和_或者%一起使用)
- _ 占一位
- % 占0或者n位
-- 把name第一个字符为张长度不限的字符取出
select * from student where name like '张%';
-- 把name第一个字符为张长度为2的字符取出
select * from student where name like '张_';
语法:
and
多条件同时满足
-- 满足name为张三,age为18的记录取出
select * from student where name = '张三' and age = 18;
语法:
or
任意条件满足
满足name为张三或者age为18的记录取出
select * from student where name = '张三' or age = 18;
聚合函数
- 聚合函数查询是纵向查询,它是对一列的值进行计算,然后返回一个结果值 ,聚合函数会忽略空值NULL
聚合函数 | 作用 |
---|---|
max(列名) | 求这一列的最大值 |
min(列名) | 求这一列的最小值 |
avg(列名) | 求这一列的平均值 |
count(列名) | 统计这一列有多少条记录 |
sum(列名) | 对这一列求总和 |
语法:
select 聚合函数(列名) from 表名 [where 条件]
-- 求student表中age的最大值
select max(age) from student;
-- 求student表中age的最小值
select min(age) from student;
-- 求student表中age的平均值
select age(age) from student;
-- 求student表中id的个数
select count(id) from student;
-- 求student表中age的合
select sum(age) from student;