数据库:文件夹
表:文件
数据:文件中的数据
SQL
结构化查询语言
以单行或多行书写,分号结尾;
语句不区分大小写,但是关键字建议使用大写。
单行注释:
– 注释内容(两个横 一个空格)
#注释内容
多行注释:
/注释内容/
DDL
操作数据库:CRUD
1.create:创建
create datebase ***;//创建数据库
create database if not exists ***;//如果存在就不会创建
create database *** character set gbk;//字符集设置为gbk(默认utf-8)
注意:可以联合使用
2.retrieve:查询
show databases;//查看数据库名称
show create database ***;//查看对应的字符集,查询某个数据库的创建语句
3.updata:修改
alter database *** character set 字符集名称;//修改***的字符集为你想改的字符集的名字
4.delete:删除
drop database ***;//删除数据库
drop database if exists ***;//如果存在就删除
5.使用数据库
select database();//查询当前正在使用的数据库
use ***;//使用数据库
操作表
1.create:创建
create table 表名(
列名1 数据类型1,
列名2 数据类型2,
...
列名n 数据类型n
);//注意 最后一列不需要逗号
int 整数类型:
age int,
double 小数类型:
double score(5,2), //最多有5位,小数点后面保留两位(999.99)
date 日期类型,包含年月日:
yyyy-MM-dd
datetime 日期,包含年月日时分秒:
yyyy-MM-dd HH:mm:ss
timestamp 时间错类型://如果将来不给这个字段赋值,那么就用系统时间,简化开发
yyyy-MM-dd HH:mm:ss
varchar 字符串:
name varchar(20) //姓名最大字符20
eg:
create table student(
id int,
name varchar(32),
age int,
score double(4,1),
birthday date,
insert_time timestamp
);
create table ** like student;//复制一份student给**
2.retrieve:查询
show tables;//查询某个数据库中所有表的名称
desc **;//查询表结构
show create table **;//查看表的字符集
3.updata:修改
alter table ** rename to **;//修改表名
alter table character set utf8;//修改表的字符集
alter table ** add 列名 数据类型;//添加列
alter table ** change 旧列名 新列名 新数据类型; //修改列名字 类型
alte table ** modify 列名 新数据类型;//修改数据类型
//删除列
4.delete:删除
drop table **;
drop table if exists **;
DML:增删改表中数据
1.添加数据
insert into 表名(列名1,...,列名n) values(值1,...,值n);
/*注意事项:
1.列名和值一一对应。不给值就写NULL。
2.如果表名后,不定义列名,是给所有列添加数值。
3.除了数字类型,其他类型需要使用引号。*/
2.删除数据
delete from 表名 [where 条件];//删除指定数据 那一行的全部删除
//eg:
//delete from stu where id=1;
/*注意:不加条件会删除所有记录。但是删除的效率低*/
truncate table 表名;//删除表,再创建一个一模一样的空表,删除效率高
3.修改数据
update 表名 set 列名1 = 值1,...,列名n = 值n [where 条件];
//eg:
//updata stu set id = 3 where id = 2;
/*注意事项:如果不条件,则会将表中的所有记录全部修改*/
DQL:查询表中记录
select
字段列表
from
表名列表
where
条件列表
group by
分组字段
having
分组之后的条件
order by
排序
limit
分页
基础查询
1.多个字段的查询
select 想查询的列1,...,想查询的列n(列的名字) from 表名;//查询特定的字段,并且可以加注释
select * from 表名;//查询所有数据
2.去除重复
select distinct * form 表名;//去重复查询,重复的不会显示
3.计算列
select name,math,english,math+english form 表名;//如果有null参与,计算结果都为null
select name,math,english,math+ifnull(english,0) form 表名;
//如果English为NULL,则赋值为0
4.起别名
select 列1 (as) 别名1,... (as) 别名,列n as 别名n from 表名;
条件查询
1.where字句跟条件
2.运算符
** > < <= >= = <>
** between…and
** in
** like:(_:单个任意字符 %: 多个任意字符)
** is null
** and 或者 &&
** or 或者 ||
** not 或者 !
select * from stu where age >= 20;//查询年龄大于等于20
select * from stu where age <> 20;//查询年龄不等于20
select * from stu where age >= 20 and age <= 30;//查询20到30
select * from stu where age between 20 and 30;//查询20到30
select * from stu where age = 18 or age = 19;//查询18或者19
select * from stu where age in(18,22,25);//查询18,22,25
/*注意事项:null值只能用 is 判断*/
select * from stu where age is null;
select * form stu where age is not null;
//模糊查询
select * from stu where name like '马%';//查询姓马的
select * from stu where name like '_化%';//查询某化...
select * from stu where name like '%马%';//查询名字有马的
排序查询
select * from stu order by math;//默认为升序ASC
select * from stu order by math DESC;//降序排序
select * from stu order by math DESC, english ASC;//如果数学成绩相同,再按照英语成绩排
聚合函数
将一列数据作为一个整体,进行纵向计算
1.count:计算个数
2.max:最大值
3.min:最小值
4.sum:和
5.avg平均值
/*注意:聚合函数会排除NULL值*/ifnull(math,0)可解决,或者写主键这一列
select count(name) from stu;//计算name的个数
select max(math) from stu;//max,avg,sum,min用法差不多
分组查询
/*注意前面必须要加分组的字段,后面也要写by sex*/
select sex,avg(math) form stu group by sex;//性别分组
select sex,avg(math),count(id) form stu group by sex;//性别分组,也可以查多个
//要求分数低于70不参与分组
select sex,avg(math),count(id) form stu where math > 70 group by sex;//分组前对条件进行限定
//分组人数大于2才显示
select sex,avg(math),count(id) form stu where math > 70 group by sex having count(id) > 2;
where和having的区别
where在分组前进行限定 ,不能判断聚合函数
having在分组之后进行限定 , 能够判断聚合函数
分页查询
//每页显示三条记录
select * from stu limit 0,3;//第一页
select * from stu limit 3,3;//第二页
//公式:开始的索引 = (当前的页码 - 1) * 每页显示的条数
//limit只能在mysql用