文章目录
SQL语句
1.介绍:操作数据库的语言,所有关系型数据库的语句标准,是一种语法规则
2.但是不同的关系型数据库语法再遵守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语句的通用语法
SQL语句可以单行或多行书写,以分号结尾
可使用空格和缩进来增强语句的可读性:基本上一个单词就是一个空格
MySQL数据库的SQL语句不去分大小写,关键字建议使用大写
例如:SELECT * FROM user
同样可以使用/* */的方式i完成注释
还可以使用井号##
sql中的数据类型
类型名称说明int 整数长度整数类型double小数类型decimal指定整数位与小数位长度的小数类型date日期类型 格式为yyyy-MM-dd,包括年月日,不包括时分秒datetime日期类型,格式为yyyy-MM-DD HH:MM:SS,包括年月日时分秒timestamp日期类型,时间戳 从1970到2024varchar(字符串长度)文本类型,M为0-65535之间的整数
MySQL中的语句
DDL之数据库操作 database
创建数据库
关键字: create database
语法:create database 数据库名字 charset utf8
在创建数据库时建议用包裹 列名也可以用
包裹
注意:
1.mysql默认编码,拉丁文latin-1,所以说创建数据库的时候,指定utf8
2.如果创建数据库的时候忘记夹utf8了,可以后改
3.在写sql语句的时候,如果库名,表名,列名和sql语句的关键字冲突了,可以用``包裹
查看数据库
语法 show databases
删除数据库
语法 drop database 数据库名;
dropdatabase sys;
使用数据库(切换数据库)
1.语法:
use 数据库名;
use sys;
DDL之表操作 ---- table
创建表
1.关键字 create table
2.语法:
create table 表名(
列名 数据类型(长度)[约束],
列名 数据类型(长度)[约束]
列名 数据类型(长度)[约束]
)
CREATETABLE category1(
uid INT,
uname VARCHAR(10));
3.注意:
定义列和列的时候,用逗号
如果是最后一列,不要用逗号
查看表
查看所有表
show tables;
查看表结构
desc 表名;
showtables;DESC category;
删除表
1.关键字 drop table
2.语法:
drop table 表名
DROPTABLE category;
修改表结构
1.添加列
alter table 表名 add 列名 类型(长度) [约束];
ALTERTABLE category add count int;
2.修改列的类型,长度以及约束
alter table 表名 modify 列名 类型(长度)[约束];
ALTERTABLE category modify count varchar(100);
3.修改列名
alter table 表名 change 旧列名 新列名 类型(长度) [约束];
ALTERTABLE category CHANGE count counts VARCHAR(12);
4.修改表名
rename table 表名 to 新表名;
RENAMEtable category to categories;
5.修改表删除列
alter table 表名 drop 列名
ALTERtable categories drop counts;
DML之数据操作语言
插入数据
1.关键字: insert into
2.语法:
a.insert into 表名(列名,列名) value (值,值)
b.insert into 表名(列名,列名) value (值,值),(值,值),(值,值),(值,值); 批量添加
c.insert into category values (值,值); -------- 如果省略列名,那么在存值时需要将所有列的值都写上
在操作数据的时候,如果时varchar类型的,建议用单引号
原因:将来我们需要用java 代码中的API去操作sql语句,而在Java中写的sql语句时字符串的
String sql = "INSERT INTO category(cid,cname) VALUES (1,“布偶”)“; ---- 双引号不明确
String sql = "INSERT INTO category(cid,cname) VALUES (1,‘布偶’)“; ---- 推荐
INSERTINTO categories(cid,cname)VALUES(1,'布偶');INSERTINTO categories(cid,cname)VALUES(2,'蓝猫');INSERTINTO categories(cid,cname)VALUES(3,'英短'),(4,'梨花');INSERTINTO categories VALUES(5,'奶牛');
删除数据
1.关键字:delete from where
2.语法:
a.delete from 表名 ---- 一次全删除
b.delete from 表名 where 条件 ------ 根据条件删除
Java与mysql符号的对应
javamysql===>><<>=>=<=<=!=!= 或者 <>以下时代码的相关演示
##删除cid的记录DELETEFROM categories WHERE cid =1;##删除cid>=5的记录DELETEFROM categories WHERE cid >=5;## 删除出cid不等于1的记录DELETEFROM categories WHERE cid !=3;DELETEFROM categories WHERE cid <>3;DELETEFROM categories WHERENOT(cid=3);
修改数据
1.关键字:update set
2.语法:
a.update 表名 set 列名 = 新值 — 全部都改成指定的新值
b.update 表名 set 列名 = 新值 — where 条件
##将cname都改成s手机UPDATE categories SET cname ='手机';##将表中手机改成金渐层UPDATE categories SET cname ='金渐层'WHERE cname ='手机';##将cid为2的数据改成银渐层UPDATE categories SET cname ='银渐层'WHERE cid =2;##将cid不等于1的cname都改成布偶UPDATE categories SET cname ='布偶'where cid <>1;
约束
约束:主要是约束指定列的数据
主键约束
1.关键字 primary key
2.特点:
a.主键列的数据唯一不能重复
b.不能为NULL
c.每个表中都应该有一个主键,此列的数据能带包一行数据,相当于人的身份证号
添加方式1:在创建表时,在字段后面直接指定(重点)
在创建表的过程中,在列后面直接写约束
CREATETABLE cats(
cid INTPRIMARYKEY,
cname VARCHAR(20))
添加方式2:在constraint约束区域,去指定主键约束
1.什么叫做constraint域
在最后一列和右半个小括号之间
2.语法
[constraint 名字] primary key(字段名)
3.注意:[constraint 名字] 可写可不写
CREATETABLE dogs(
cid INT,
cname VARCHAR(20),PRIMARYKEY(cid));
添加方式3:通过修改表结构的方式
1.格式: ALTER TABLE 表名 ADD [CONSTRAINT 名称] PRIMARY KEY (字段列表)
2.注意:[CONSTRAINT 名称] 可以省略不写
ALTERTABLE category1 ADDPRIMARYKEY(uid);
联合主键
1.什么叫做联合主键:
多个列合称为一个主键
2.特点:
多个列中不能有完全重复的数据
不能为NULL
删除主键约束
ALTER TABLE 表名 DROP PRIMARY KEY ---- 删除主键约束
ALTERTABLE category1 ADDPRIMARYKEY(uid);
自增长约束
基本操作
1.关键字:auto_increment 一般情况下和主键结合使用
2.特点
自增长约束修的列,数据不用我们自己维护,mysq会自动维护
3.自增长约束和主键约束区别:
a.相同点:
此列中的数据唯一
b.不同点:
一个表只能有一个主键,可以代表一条数据
一个表可以有多个自增长列,不能代表一条数据
INSERTINTO dogs VALUES(1,'边牧');INSERTINTO dogs VALUES(NULL,'金毛');INSERTINTO dogs(cname)VALUES('泰迪');
注意:
如果不写列名,我们存数据的时候要一一对应,将所有要存的数据都写上
删除数据,如果此列为自增长列,删除之后,列号不会重新编写,会继续从被删除的那列序号往后编写
摧毁表结构
TRUNCATE TABLE 表名;
自增长是一个约束,操作起来和其他约束不太一样
如果自增长约束和主键约束合起来使用想删除,需先删除自增长约束,在删除主键约束
ALTERTABLE dogs MODIFY cid int;ALTERTABLE dogs DROPPRIMARYKEY;
truncate和delete的区别
1.truncate:清空数据,摧毁表结构,自增长列会重新标号
2.delete:删除表数据,不会摧毁表结构,自增长列不会重写编号,他会继续往下编
非空约束
1.关键字:NOT NULL
2.特点:
被NOT NULL 修饰的列不能为空
建表
CREATETABLE product(
pid INTPRIMARYKEYAUTO_INCREMENT,
pname VARCHAR(20)NOTNULL,
price INT);
插入数据
INSERTINTO product(pname,price)VALUES('键盘',300);##相当于String s = ""INSERTINTO product(pname,price)VALUES('',300);##相当于 String s = NULL,报错INSERTINTO product(pname,price)VALUES(NULL,300);
唯一约束
1.关键字:UNIQUE
2.特点:
被UNIQUE约束的列,数据要唯一,不能重复
3.注意:
唯一约束不能当主键使用,一个表中可有多个列为唯一约束
INSERTINTO cats(pname,price)VALUES('布偶',4000);##报错INSERTINTO cats(pname,price)VALUES('布偶',4000);
删除唯一约束
ALTER TABLE person DTOP INDEX 名称 [名称时CONSTRAINT后面的名字]
ALTERTABLE cats DROPINDEX pname;
简单查询
数据准备
创建商品表
CREATETABLE product(
pid INTPRIMARYKEY,
pname VARCHAR(20),
price DOUBLE);
简答查询
1.关键字:select from where
2.语法:
a.select * from 表名 — 查询所有数据,展示所有列
b.select 列名,列名 from 表名 ---- 查询所有,展示所指定的列
c.select 列名 from 表名 where 条件 ----- 根据条件查询,显示指定列的数据
3.注意:
a.查询之后,想展示哪些列的数据,就在select后面写那些列的列名
b,查询出来结国也是一张表,但是伪表,此表是只读的
SELECT*FROM product;SELECT pid,pname FROM product;## 可以给表或者列起别名SELECT pid '商品id', pname '商品名字'FROM product;
去重复值 关键字: distinct(列名)
SELECTDISTINCT(price)FROM product;
给列中的数据做计算
SELECT pname,(price +100)'newprice'FROM product;
条件查询
比较运算符< <= >= = <>大于、小于、大于(小于)等于、不等于BETWEEN …AND…显示在某一区间的值(含头含尾)字段 IN(set)显示在in列表中的值,例:price in(100,200) 查询id为1,3,7的商品: id in(1,3,7)列名 LIKE ‘张pattern’模糊查询,Like语句中,% 代表零个或多个任意字符,_ 代表一个字符, 例如:
first_name like '_a%';
比如:查询姓张的人:name like ‘张%’
查询商品名中带香的商品: pname like ‘%香%’
查询第二个字为想的商品: like ‘想%'
查询商品名为四个字的商品:like '___’IS NULL判断是否为空逻辑运行符and (与)多个条件同时成立 全为true,整体才为trueor(或)多个条件任一成立 有真则真not(非)不成立,例:
where not(salary>100);
相关查询语句
SELECT*FROM product WHERE pname ='花花公子';SELECT*FROM product WHERE price =800;SELECT*FROM product WHERE price >60;SELECT*FROM product WHERE price BETWEEN200AND600;SELECT*FROM product WHERE price =200or price =600;SELECT*FROM product WHERE price IN(200,600);##查询以香字开头的商品SELECT*FROM product WHERE pname LIKE'香%'##查询含有霸的商品SELECT*FROM product WHERE pname LIKE'%霸%'##查询商品名为null的SELECT*FROM product WHERE pname ISNULL;SELECT*FROM product WHERE pname ISNOTNULL;
排序查询
1.关键字:order by
2.语法:
select 列名 from 表名 order by 排序字段 asc|desc ---- 查询之后要指明那一列进行排序
asc 升序 默认
desc 降序
3.注意:先查询,后排序
书写sql语句关键字的顺序
select
from
where
group by
having
order by
执行顺序
from
where
group by
having
select
order by
先定位到要查询哪个表,然后根据什么条件去查,表确定好了,条件也确定好了,开始利用select查询,查询得出一个结果,在针对这个结果进行一个排序
##对价格进行降序排序SELECT*FROM product ORDERBY price DESC;##对价格进行升序排序SELECT*FROM product ORDERBY price ASC;SELECTDISTINCT(price)FROM product ORDERBY price ASC;
版权归原作者 龙俊俊 所有, 如有侵权,请联系我们删除。