数据库是不认识JAVA语言的,但是我们同样要与数据库交互,这时需要使用到数据库认识的语言SQL语句,它是数据库的代码。
结构化查询语言(Structured Query Language)简称SQL,是一种数据库查询和程序设计语言,用于存取数据以及查询、更新和管理关系数据库系统。
创建数据库、创建数据表、向数据表中添加一条条数据信息均需要使用SQL语句。
SQL语句分类:
- 数据定义语言:简称DDL(Data Definition
Language),用来定义数据库对象:数据库,表,列等。关键字:create,alter,drop等 - 数据操作语言:简称DML(Data Manipulation
Language),用来对数据库中表的记录进行更新。关键字:insert,delete,update等 - 数据控制语言:简称DCL(Data Control Language),用来定义数据库的访问权限和安全级别,及创建用户。
- 数据查询语言:简称DQL(Data Query Language),用来查询数据库中表的记录。关键字:select,from,where等
以下是一些SQL语句操作及注释:
/*
创建一个属于自己的数据库
不要使用MySQL自带的数据库
*/
CREATE DATABASE tamyda;
/*
注明现在使用的是哪个数据库
use 数据库名
*/
USE tamyda;
/*
创建数表格式
creat table 表名(
列名1 数据类型 约束, //约束可写可不写
列名2 数据类型 约束,
)
创建用户表,用户编号,姓名,地址
*/
CREATE TABLE users(
uid INT,
uname VARCHAR(20),
uaddress VARCHAR(200)
);
DROP TABLE users;
/*
将编号设置为主键
数据库可以让主键列的数据自动增长
primary key auto_increment
*/
CREATE TABLE users(
uid INT PRIMARY KEY AUTO_INCREMENT,
uname VARCHAR(20),
uaddress VARCHAR(200)
);
/*
显式库中所有的表
*/
SHOW TABLES
/*
查看表结构
desc 表名
*/
DESC users;
/*
对已存在的表进行操作
alter table 表名 add 列名 数据类型 约束
*/
ALTER TABLE users ADD tel INT
/*
修改列,在原有基础上修改
alter table 表名 modify Tel varchar(50)
*/
ALTER TABLE users MODIFY tel VARCHAR(50);
DESC users;
/*
修改列名
alter table 表名 change 旧列名 新列名 数据类型 约束
*/
ALTER TABLE users CHANGE tel newtel DOUBLE;
DESC users;
/*
删除列
alter table 表名 drop 列名
*/
ALTER TABLE users DROP newtel;
DESC users
/*
修改表名
rename table 表名 to 新表名
*/
RENAME TABLE users TO newuse;
/*
向数据表中添加数据 insert
insert into 表名(列名1,列名2,列名3)values (值1,值2,值3)
注意:
列名,表名问题
对应问题,数据个数,数据类型
*/
CREATE TABLE product(
id INT PRIMARY KEY AUTO_INCREMENT,
pname VARCHAR(100) NOT NULL,
price DOUBLE
);
INSERT INTO product (id,pname,price) VALUES (1,'笔记本',5555.9);
INSERT INTO product (id,pname,price) VALUES (2,'手机',3000.5);
/*
添加数据格式,不考虑主键
insert into 表名 (列名)values (值)没有主键
*/
INSERT INTO product(pname,price)VALUES('洗衣机',5000.0);
/*
所有值全给出
insert into 表名 values(全列值)
*/
INSERT INTO product VALUES(4,'微波炉',500)
/*
批量数据
insert into 表名(列名1,列名2,列名3)values(值1,值2,值3),(值1,值2,值3)
可以无限增加
*/
INSERT INTO product(pname,price)VALUES
('智能机器人',9000),
('彩电',4000.0),
('沙发',600.5)
/*
手动删除会出现主键断号现象,属于正常,如果没有主键添加,则直接跳过被删的主键号,
但是可以以该号码为主键进行添加
*/
/*
对数据进行更新操作
在原有的数据基础上进行操作
update 表名 set 列1=值1,列2=值2(在这种情况下,所有的该列数据都被修改)
where条件
*/
UPDATE product SET price=19999 WHERE id=5;
UPDATE product SET price=9999 WHERE pname = '智能机器人';
/*
删除表中的数据
delete from 表名 where 条件(当删除所有记录时,其auto_increment不清空)
drop table 表名(删除整张表)
truncate table 表名;(摧毁表,直接将表删除,重新建表,auto_increment将置为0)
*/
DELETE FROM product WHERE id=7;
grep mysql;
CREATE TABLE zhangwu (
id INT PRIMARY KEY AUTO_INCREMENT, -- 账务ID
zname VARCHAR(200), -- 账务名称
zmoney DOUBLE -- 金额
);
INSERT INTO zhangwu(id,zname,zmoney) VALUES (1,'吃饭支出',247);
INSERT INTO zhangwu(id,zname,zmoney) VALUES (2,'工资收入',12345);
INSERT INTO zhangwu(id,zname,zmoney) VALUES (3,'服装支出',1000);
INSERT INTO zhangwu(id,zname,zmoney) VALUES (4,'吃饭支出',325);
INSERT INTO zhangwu(id,zname,zmoney) VALUES (5,'股票收入',8000);
INSERT INTO zhangwu(id,zname,zmoney) VALUES (6,'打麻将支出',8000);
INSERT INTO zhangwu(id,zname,zmoney) VALUES (7,NULL,5000);
/*
查询指定列的数据
select 列名 from 表名 where 条件
*/
SELECT zmoney FROM zhangwu;
/*
*表示所有数据
*/
SELECT * FROM zhangwu;
/*
查询去掉重复记录
distinct去除
*/
SELECT DISTINCT zmoney FROM zhangwu;
SELECT DISTINCT zname FROM zhangwu;
/*
查询重新命名列
as 关键字
*/
SELECT zname AS newname FROM zhangwu;
/*
在查询中直接做数学中的计算
直接写在查找的数据中
*/
SELECT zname,zmoney+10000 FROM zhangwu;
/*
where条件查询
*/
SELECT * FROM zhangwu WHERE zname='吃饭支出';
SELECT * FROM zhangwu WHERE zmoney>1000;
SELECT * FROM zhangwu WHERE zmoney>=2000 AND zmoney<=5000;
SELECT * FROM zhangwu WHERE zmoney BETWEEN 500 AND 5000;
-- 查询金额是1000,3500,5000其中一个
SELECT * FROM zhangwu WHERE zmoney=500 OR zmoney=3500 OR zmoney=5000;
SELECT * FROM zhangwu WHERE zmoney IN (1000,3500,5000);
SELECT * FROM zhangwu;
/*
模糊查询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);
/*
查询,对查询结果进行排序(升序,降序)
[desc降][asc升]
*/
SELECT * FROM zhangwu ORDER BY zmoney;
SELECT * FROM zhangwu ORDER BY zmoney DESC;
SELECT * FROM zhangwu WHERE zname LIKE '%支出%' ORDER BY zmoney;
/*
聚合函数
count 对一列的数据进行统计,计算其数据个数count(列名)
*/
USE tamyda;
SELECT COUNT(zname) FROM zhangwu;
-- sum 对所有的数据进行求和(数值求和)
SELECT SUM(zmoney) FROM zhangwu;
-- max对某列数据取最大值min最小值
SELECT MAX(zmoney)FROM zhangwu;
-- avg求该列的平均值
SELECT AVG(zmoney)FROM zhangwu;
/*
吃饭支出多少,工资收入多少,服装支出,股票收入,打麻将支出
*/
SELECT SUM(zmoney),zname FROM zhangwu GROUP BY zname;
-- 对zname进行分组求和,但只要支出
SELECT SUM(zmoney)AS 'getsum',zname FROM zhangwu WHERE zname LIKE '%支出%'
GROUP BY zname
ORDER BY getsum DESC;
-- 对zname进行分组求和,但只要支出,要求显示金额大于5000
-- 结果是分组查询后,再次进行筛选,不能使用where,分组后再次过滤,关键字having
SELECT SUM(zmoney)AS 'getsum' ,zname FROM zhangwu WHERE zname LIKE '%支出%'
GROUP BY zname
HAVING getsum>5000;