1、SQL的通用语法
(1)SQL语句可以单行或多行书写,以分号结尾
(2)可使用空格和缩进来增强语句的可读性
(3)MySQL数据库的SQL语句不区分大小写,建议使用大写,例如:SELECT * FROM user。
(4)同样可以使用/**/的方式完成注释
net start mysql 启动mysql
mysql -uroot -p 进入mysql
mysql -uroot -p 进入mysql的另外一种方式
exit 退出mysql
注:windows的编码是使用的gbk格式,我们一般安装的mysql是utf-8,所以一般在命令里面显示的汉字都会是乱码所以在输出表之前要先改一下编码格式 set names'gbk';然后再输出查看 select * from 表名;
2、数据库的操作 database
1、创建数据库 create database 数据库名; 2、查看数据库MySQL服务器中的所有的数据库: show databases; 3、查看某个数据库的定义信息: show create database 数据库名 4、删除数据库: drop database 数据库名 5、切换数据库: use 数据库名 6、查看正在使用的数据库: select database();
3、表结构相关的语句
3-1、创建表
create table 表名(
列名1 数据类型 约束(可选), (约束是限制列到底能怎样,写什么样数据)
列名2 数据类型 约束,
列名3 数据类型 约束
);
例:
创建数据表,用户编号,姓名,用户地址
将编号列,设置为主键约束,保证了列的数据唯一性,非空型 primary key
数据库有一个功能可以让主键列数据,实现自动增长(AUTO_INCREMENT)
varchar类型要制定字符的长度
CREATE TABLE users(
uid INT PRIMARY KEY AUTO_INCREMENT,
uname VARCHAR(20),
uaddress VARCHAR(200)
);
删除主键:alter table 表名 drop primary key; alter table sort dropprimary key;
主键自动增长:一般主键是自增长的字段,不需要指定。
实现添加自增长语句,主键字段后加auto_increment(只适用MySQL)
3-2、查看表
SHOW TABLES; /*显示所有的数据表*/
DESC users;/*查看表中的具体结构*/
3-3、删除表
drop table 表名;
3-4、修改表结构格式
1、添加列: alter table 表名 add 列名 类型(长度) 约束; ALTER TABLE users ADD tel INT; 2、 修改列,在原有的列上修改 alter table 表名 modify 列名 类型(长度) 约束; 作用:修改表修改列的类型长度及约束. 为分类表的分类名称字段进行修改,类型varchar(50) 添加约束 not null ALTER TABLE sort MODIFY sname VARCHAR(50) NOT NULL; 3、alter table 表名 change 旧列名 新列名 类型(长度) 约束; 作用:修改表修改列名. 例如: 为分类表的分类名称字段进行更换 更换为 snamesname varchar(30) ALTER TABLE sort CHANGE sname snamename VARCHAR(30);
4、 alter table 表名 drop 列名;
作用:修改表删除列.
例如: 删除分类表中snamename这列
ALTER TABLE sort DROP snamename;
5、 rename table 表名 to 新表名;
作用:修改表名
例如: 为分类表sort 改名成 category
RENAME TABLE sort TO category;
6、 alter table 表名 character set 字符集;
作用:修改表的字符集
例如:为分类表 category 的编码表进行修改,修改成 gbk
ALTER TABLE category CHARACTER SET gbk;
3-5、插入表记录
语法: insert into 表(列名1,列名2,列名3..) values (值1,值2,值3..); -- 向表中插入某些列 insert into 表 values (值1,值2,值3..); --向表中插入所有列 INSERT INTO product (id,pname,price) VALUES (1,'笔记本',5200); INSERT INTO product (id,pname,price) VALUES (2,'智能手机',999); INSERT INTO product (pname,price) VALUES ('洗衣机',800); /*主键自动增长,不用写*/ INSERT INTO product VALUES (4,'微波炉',300.2); /*主键对应的数必须写上*/ 添加数据格式,批量写入 格式: insert into 表名 (列名1,列名2,列名3) values (值1,值2,值3),(值1,值2,值3); 后面的可以无限添加
3-6、更新记录
1、 对数据进行更新操作 数据在原有的基础上修改 格式: update 表名 set 列1=值1,列2=值2 where 条件
注意: 列名的类型与修改的值要一致. 修改值得时候不能超过最大长度. 值如果是字符串或者日期需要加’’.
2、 修改条件的写法:
id = 6
id<>6 (数据库里面的不等于)
id<=6
与或非 and or not
id in(1,3,4,5,6)包含的关系
id NOT IN(1,3,4,5,6)不包含
-- 将笔记本的价格,和沙发的价格全部修改为2000
UPDATE product SET price=3001 WHERE id NOT IN (1,3,4,5,6);
-- 添加一个热水器
INSERT INTO product (pname,price) VALUES ('热水器',542);
3、删除表中的数据
格式:
delete from 表名 where 条件 或者 truncate table 表名;
drop table 表名 删除整个数据表
-- 删除热水器
DELETE FROM product WHERE id=8; -- 要加上id不加上就会删除整个
删除表中所有记录使用deletefrom 表名; 还是用truncate table 表名;
删除方式:delete 一条一条删除,不清空auto_increment记录数
truncate 直接将表删除,重新建表,auto_increment将置为零,从新开始。
4、SQL查询语句
CREATE TABLE zhangwu ( id INT PRIMARY KEY AUTO_INCREMENT, -- 账务ID zname VARCHAR(200), -- 账务名称 money DOUBLE -- 金额 ); INSERT INTO zhangwu(id,zname,money) VALUES (1,'吃饭支出',247); INSERT INTO zhangwu(id,zname,money) VALUES (2,'工资收入',12345); INSERT INTO zhangwu(id,zname,money) VALUES (3,'服装支出',1000); INSERT INTO zhangwu(id,zname,money) VALUES (4,'吃饭支出',325); INSERT INTO zhangwu(id,zname,money) VALUES (5,'股票收入',8000); INSERT INTO zhangwu(id,zname,money) VALUES (6,'打麻将支出',8000); INSERT INTO zhangwu(id,zname,money) VALUES (7,NULL,5000); id INT PRIMARY KEY AUTO_INCREMENT, -- 账务ID zname VARCHAR(200), -- 账务名称 money DOUBLE -- 金额 );
1、查询指定字段信息
格式:
select 列名1,列名2 from表名
SELECT zname,money FROM zhangwu;
2、查询所有的列的数据
格式:
select * from 表名
SELECT * FROM zhangwu;
3、 查询去掉重复的记录 distinct用于去除重复记录
DISTINCT 关键字 跟随列名
SELECT DISTINCT money , zname FROM zhangwu;
4、 查询重新命名列 查询临时改列名 as关键字
SELECT zname AS '名称' FROM zhangwu;
5、 条件查询
where语句表条件过滤。满足条件操作,不满足不操作,多用于数据的查询与修改。 格式 :select 字段 from 表名 where 条件; while条件的种类如下:
1、查询所有吃饭支出记录
SELECT * FROM zhangwu WHERE name = '吃饭支出';
2、查询出金额大于1000的信息
SELECT * FROM zhangwu WHERE money >1000;
3、查询出金额在2000-5000之间的账务信息
SELECT * FROM zhangwu WHERE money >=2000 AND money<=5000;
或SELECT * FROM zhangwu WHERE money BETWEEN 2000 AND 5000;
4、查询出金额是1000或5000或3500的商品信息
SELECT * FROM zhangwu WHERE money =1000 OR money =5000OR money =3500;
或SELECT * FROM zhangwu WHERE money IN(1000,5000,3500);
SELECT * FROM zhangwu WHERE money NOT IN(1000,5000,3500); -- 查询不是在这区间的
5、like模糊查询
查询都有的支出
SELECT * FROM zhangwu WHERE zname LIKE "%支出%"; -- %表示多个字符
-- 查询账务的名字,五个字符的
SELECT * FROM zhangwu WHERE zname LIKE "_____"; -- 一个下划线代表着一个字符
-- 查询账务名不为空
SELECT * FROM zhangwu WHERE zname IS NOT NULL; -- 是 不是空的
SELECT *FROM zhangwu WHERE NOT (zname IS NULL); -- 另外一种写法
升序,降序,对指定列排序
order by 列名[desc][asc] 默认是升序排序
desc是降序
asc 升序排列,可以不写 但是一般不对汉字进行排序,汉字是AIIS查询的并不是汉字的首字母
-- 查询账务表,价格进行升序
SELECT *FROM zhangwu ORDER BY money;
-- 查询账务表,价格进行降序
SELECT *FROM zhangwu ORDER BY money DESC;
-- 查询账务表,查询所有的支出,对金额降序排序 (顺序是对已有的结果进行排序,不是先排序再添加条件 ,排序放在最后面)
-- 先过滤条件 where查询的结果再排序
SELECT *FROM zhangwu WHERE zname LIKE"%支出%" ORDER BY money DESC;
7、使用聚合函数查询计算
函数介绍:
* 之前我们做的查询都是横向查询,它们都是根据条件一行一行的进行判断,而使用聚合函数查询是纵向查询,
它是对一列的值进行计算,然后返回一个单一的值;另外聚合函数会忽略空值。
* count:统计指定列不为NULL的记录行数;
* sum:计算指定列的数值和,如果指定列;
* max:计算指定列的最大值,如果指定列是字符串类型,那么使用字符串类型不是数值类型,那么计算结果为0排0序运算;
* min:计算指定列的最小值,如果指定列是字符串类型,那么使用字符串排序运算;
* avg:计算指定列的平均值,如果指定列类型不是数值类型,那么计算结果为0;
-- count 求和,对表中的数据的个数求和 count (列名)
-- 查询统计账务表中,一共有多少条数据
SELECT COUNT(*) FROM zhangwu; -- 改出后会以函数名命名列名
-- 改变列名
SELECT COUNT(*)AS"count" FROM zhangwu;
-- sum求和,对一列数据进行求和计算 sum(列名)
-- 对账务表查询,对所有的金额求和计算
SELECT SUM(money) FROM zhangwu;
-- 求和,统计所有支出的总金额
SELECT SUM(money) FROM zhangwu WHERE zname LIKE "%支出%";
SELECT SUM(money) FROM zhangwu;
-- max 函数,对某列数据,获取最大值
SELECT MAX(money) FROM zhangwu;
-- avg 函数,计算一个列所有的数据的平均值 但是如果是money如果值是空,zname不为空(不计算这一行)如果money不为空zname为空则还是要算上这个行
SELECT AVG(money) FROM zhangwu;
查询所有的数据
吃饭支出 共计多少
工资收入 共计多少
服装支出 共计多少
股票收入 共计多少
打麻将支出 共计多少
分组查询:group by 被分组的列名 SELECT 字段1,字段2… FROM 表名 GROUP BY 字段 HAVING 条件;
必须跟随聚合函数
select 查询的时候,被分组的列,要出现在select选择列的后面
SELECT zname,SUM(money)AS"sum" FROM zhangwu GROUP BY zname;
-- 对zname内容进行分组查询求和,但是只要支出
SELECT SUM(money)AS"sum" ,zname FROM zhangwu WHERE zname LIKE "%支出%" GROUP BY zname;
-- 对zname内容进行分组查询求和,但是只要支出 然后再排序 建议修改列名(不改容易造成阅读上的错误)
SELECT SUM(money)AS"sum" ,zname FROM zhangwu WHERE zname LIKE "%支出%" GROUP BY zname ORDER BY SUM(money) DESC;
-- 对zname内容进行分组查询求和,但是只要支出,显示金额大于5000
结果集是分组查询后,再次进行筛选,不能使用where(就是GROUP BY zname后面不在要where)
分组后再次过滤,关键字having
having 与where的区别:
1、having是在分组后对数据进行过滤
where是在分组前对数据进行过滤
2、having后面可以使用分组函数(统计函数)
where后面不可以使用分组函数
SELECT SUM(money)AS"sums" ,zname FROM zhangwu WHERE zname LIKE "%支出%" GROUP BY zname HAVING sums>5000;
腾不出时间思考的人,迟早会腾出时间来后悔;腾不出时间学习的人,迟早会腾出时间来伤悲。