常用SQL语句“一文足以”

数据库常用指令 DDL

用户登录

mysql -u 用户名 -p 密码

mysql -u root -p 

查看数据库

show databases;

创建一个简单默认字符集的数据库

create database 数据库名称;

create database test;

mysql的默认编码为latin1,存储中文时总会出现乱码

创建数据库,判断是否存在如果存在什么都不做

create database if not exists 数据库名称;

  • 不会报任何错误
create database if not exists test;

创建数据库,并指定字符集

create database 数据库名 default character set 字符集;

create database test1 default character set gbk;

查看数据库

  • 查看所有的:但是看不到字符集
show databases;
  • 查看单个的数据库并查看基本信息

show create database 数据名称;

show create database test;
+----------+-----------------------------------------------------------------+
| Database | Create Database                                                 |
+----------+-----------------------------------------------------------------+
| test     | CREATE DATABASE `test` /*!40100 DEFAULT CHARACTER SET latin1 */ |
+----------+-----------------------------------------------------------------+
1 row in set (0.00 sec)

删除数据库

drop database 数据库名称;

  • 删除怎么查看:show databases;
drop database test;

修改数据库

  • 修改字符集
  • 修改数据库的名称(建议直接新创建)

alter database 数据名称 default character set 字符集;

alter database test default character set UTF8;

切换数据库

use 数据库名称;

use test;

查看目前正在使用的数据库

 select database();

表的常用指令 DDL

创建表

建立数据表,就是建立表结构,指定数据表中的一共有多少列,每一列的数据类型

create 指的是【创建】,table 指的是【数据表】。

create table 表名 (
	-- 可以定义多个列
    字段名 类型(长度) 约束,
    字段名 类型(长度) 约束
);

【案例】

-- 创建用户表
create table t_user (
	uid int primary key auto_increment, -- 用户 id
	uname varchar(20) -- 用户名
);
-- auto_increment 标识自增 (前提是 int 类型)
字符类型

常用的类型有:

  • 数字型:int、integer、bigint、mediumint、smallint、tinyint
  • 浮点型:double、float、decimal(精确小数类型)
  • 字符型:char(定长字符串)、varchar(可变长字符串)
  • 日期类型:date(只有年月日)、time(只有时分秒)、datetime(年月日,时分秒)、year
    (年)
  • 二进制字符串类型:binary(定长,以二进制形式保存字符串)、varbinary(可边长)
单表约束
  • 一个表要有一个主键
  • 唯一约束
    • 如:身份证号
  • 非空约束(维护数据的唯一性完整性)
    • 不能不填:如:男女
主键约束:primary key
唯一约束:unique
非空约束:not null
注意

主键约束 = 唯一约束 + 非空约束

查看表

要先选中数据库要不会报错

描述一下表
  • Field(字段)
  • Type(类型)
  • Null(是不是非空)
  • Key(是不是主键)
  • Extra(扩展信息)
desc t_user;
查看数据中的所有表
show tables;
查看表的Sql语句
show create table t_user;

快速创建一个表

create table 新表名 linke 旧表名;

  • 会和旧的表一样
create table tb_user like t_user;

删除一个表

drop table 表名;

drop table tb_user;
  • 删除一个表,判断一下删除表是否存在 让他不报错
    • 存在就删除不存在就不删
drop table if exists tb_user;

修改表

-- 1.修改表添加列
alter table 表名 add 列名 类型(长度) 约束;
-- 2.修改表修改列的类型长度及约束
alter table 表名 modify 列名 类型(长度) 约束;
-- 3.修改表修改列名
alter table 表名 change 旧列名 新列名 类型(长度) 约束;
-- 4.修改表删除列
alter table 表名 drop 列名;
-- 5.修改表名
rename table 表名 to 新表名;

[案例]/(有数据需要谨慎)

-- 修改表添加列
alter table user add address varchar(50);
-- 修改表修改列的类型长度及约束
alter table user modify address int(30);
-- 修改表修改列名
alter table user change address addr varchar(50);
-- 修改表删除列
alter table user drop addr;
-- 修改表名 
rename table user to  tb_user;

数据操作语音 DML

插入记录:insert

语法:

-- 1.向表中插入某些列
insert into(列名1,列名2,列名3..) values (1,2,3..);
-- 2.向表中插入所有列
insert intovalues (1,2,3..);

-- 3.从另外一张表查某些列的结果插入当前表
insert into(列名1, 列名2, 列名3..) values select (列名1,列名2,列名3..) from-- 4.从另外一张表查所有列的结果插入当前表
insert intovalues select * from

【案例】

-- 向表中插入某些列,必须写列名
insert into user (uid, uname) values (001, 'cuihua');
-- 向表中插入所有列
insert into user values (002, 'aqiang');

注意

  • ① 列名数与 values 后面的值的个数相等
  • ② 列的顺序与插入的值得顺序一致
  • ③ 列名的类型与插入的值要一致.
  • ④ 插入值得时候不能超过最大长度.
  • ⑤ 值如果是字符串或者日期需要加引号’’ (一般是单引号或者双引号)

更新记录:update

语法格式:update 更新、set 修改的列值、where 指定条件。

-- 1.不指定条件,会修改表中当前列所有数据
update 表名 set 字段名=, 字段名=;
-- 2.指定条件,符合条件的才会修改
update 表名 set 字段名=, 字段名=where 条件;

【案例】

-- 更新所有字段的值
update user set uname='xiaodong';
-- 根据指定的条件来更新
update user set uname='hashiqi' where uid = 2;

注意

  • ① 列名的类型与修改的值要一致
  • ② 修改值得时候不能超过最大长度
  • ③ 值如果是字符串或者日期需要加==``==引号

删除记录:delete & truncate

语法格式:

delete from 表名 [where 条件];
truncate table 表名

注意

删除表中所有记录使用【delete from 表名】,还是用【truncate table 表名】?

删除方式的区别:

delete:一条一条删除,不清空 auto_increment 记录数。
truncate:直接将表删除,重新建表,auto_increment 将置为零,从新开始

【案例】

-- 删除所有数据
delete from user;
-- 删除 uid = 1 的用户
delete from user where uid = 1;

查询DQL

查询语句的顺序
select 列表 from where 条件 group by(分组) having(过滤) order by(排序)

select * | 列名, 列名  from 表名 [where 条件];
  • select是查询指令,可以读1-n行数据;
  • 列名换成==*==号,可以查询所有字段数据;
  • 使用where来指定对应的条件

为了后续查询语句准备工作【样例表】

CREATE TABLE products (
    -- 自增加 AUTO_INCREMENT
    pid INT PRIMARY KEY AUTO_INCREMENT,
    pname VARCHAR(20), -- 商品名称
    price DOUBLE, -- 商品价格
    pdate DATE, -- 日期
    sid VARCHAR(20) -- 分类ID
);

INSERT INTO products VALUES(NULL,'泰国大榴莲', 98, NULL, 's001');
INSERT INTO products VALUES(NULL,'新疆大枣', 38, NULL, 's002');
INSERT INTO products VALUES(NULL,'新疆切糕', 68, NULL, 's001');
INSERT INTO products VALUES(NULL,'十三香', 10, NULL, 's002');
INSERT INTO products VALUES(NULL,'老干妈', 20, NULL, 's002');
INSERT INTO products VALUES(NULL,'老干妈', 20, NULL, 's002');

简答查询

-- 查询所有
select * from 表名

【案例】

-- 查询所有
select * from products

查询所有商品的指定列

select 列名, 列名... from products;

【案例】

select pname, sid from products;

别名查询

-- 语法
-- 使用关键字as, as可以写上也可以省略
-- 表的别名、列的别名
select 列名 as 别名, 列名 as 别名 .... from 表名 as 表别名
-- or
select 列名 别名, 列名 别名 .... from 表名 表别名

【案例】

-- as or No as
select * from products as p;
select * from products p;
-- 表的别名为什么是 表别名.列明【是不是脱了裤子放p】
-- 实则不是的 因为在多表查询中会可能会有重复列名,就会用到【表别名.列明】
-- 表的别名 还可以简化SQL,区分表
-- 列别名的作用:改变查询结果中列名的名称, 还可以增加可读性
select p.pid pname  from products as p;

去掉重复值

select distinct 列名, 列名 from 表名;

【案例】

select distinct pname,sid from products;

为一列上所有的的数据加上2

select 列名 + 数值 from 表名;

【案例】

select pname, price + 2 from products;

条件查询

使用条件查询,可以根据当下具体情况直查想要的那部分数据,对记录进行过滤。

SQL 语法关键字: WHERE

语法格式:

select * from 表名 where 条件;

条件怎么写:

操作符描述实例
=等号,检测两个值是否相等,如果相等返回true(A = B) 返回false
<>,!=不等于,检测两个值是否相等,如果不相等返回true(A != B) 返回 true
>大于号,检测左边的值是否大于右边的值,如果左边的值大于右边的值返回true(A > B) 返回 false
<小于号,检测左边的值是否小于右边的值,如果左边的值小于右边的值返回true(A < B) 返回 true
>=大于等于号,检测左边的值是否大于或等于右边的值,如果左边的值大于或等于右边的值返回true(A >= B) 返回 false
<=小于等于号,检测左边的值是否小于于或等于右边的值,如果左边的值小于或等于右边的值返回true(A <= B) 返回 true

运算符:局限性只能针对一个字段(不使用逻辑运算符的前提下)

-- 查询商品名称为十三香的商品所有信息
select * from products where pname='十三香';

-- 查询商品名价格 >60 商品所有信息
select * from products where price > 60;

-- 不等于
select * from products where price <> 60;
select * from products where price != 60;

逻辑运算符

NOT逻辑非【!】
AND逻辑与【&&】
OR逻辑或【||】

逻辑运算符:作用是将两个及以上的条件组合在一起

逻辑运算符:

  • NOT 【非】
  • AND 【与】
  • OR 【或】
-- 语法
-- 查询大商品价格 大于40且小于30的所有商品 【逻辑有问题,只是语法没有错误】
select * from 表名 where 条件1 逻辑运算符 条件2;
-- 查询大商品价格 大于40或小于30的所有商品
 select * from 表名 where 条件1 逻辑运算符 条件2;

【案例】

-- 查询大商品价格 大于40或小于30的所有商品
 select * from products where price > 30 OR  price < 30;

查询条件in

作用指定范围内的所有数据

 select * from products where 列名 in (3, 2);

【案例】

-- 在范围内
select * from products where pid in (3, 2);
-- 不在范围内
select * from products where pid  not in (38, 38);

范围查询

范围查询:作用查询指定条件内的数据,价格[30 - 100]

  • 01写法查询
select *from products where price >= 38 && price <= 98;
  • 02写法: Between … and … 【>= and <=】
select * from products where price between 38 and 98;

模糊查询

模糊查询:作用是帮助匹配模糊的字段内容

如有字段:一号学生、二号学生、三号学生、四号学生… …

模糊查询:查询学生只要字段中包含了学生就回查询到!

-- 语法: where 之后加上 like 语法。【通配符有】 % (百分号), _ (下划线)

% (百分号) 代表任意长度的内容模糊匹配:

  1. 【%xxx】以 xxx 结尾的任意内容。
  2. 【xxx%】以 xxx 开头的任意内容。
  3. 【%xxx%】包含xxx的任意内容。

_ (下划线) 代表任意一个字符的内容模糊匹配:

  1. 【_xxx】以任意单个字符开头的 xxx 的内容。

  2. 【xxx__x】以 xxx 中间任意二个字符以 x 结尾的内容。

-- 语法
-- 查询所有新疆的产品
select * from 表名 where 列名 like 'xx%';
-- 以打大枣结尾的,但是头两个字符任意
select * from 表名 where 列名 like '__xx';

【案例】

-- 查询所有新疆的产品 %
select * from products where pname like '新疆%';

-- 以打大枣结尾的,但是头两个字符任意 __
select * from products where pname like '__大枣';

排序查询

排序查询:作用将查询结果进行排序

-- 语法
select * from 表名 where 字段=order by 字段名 排序规则[升序、降序]
-- 升序 asc、降序desc

【案例】

-- 根基价格 升序
select *from products order by price asc;
-- 查询所有包含'新'的商品,并且价格是从大大小
select * from products where pname like '%新%' order by price desc;

聚合查询

聚合查询:作用对单列数据进行聚合分析【求和、求平均值、求最大值,求最小值】

-- 语法
select 聚合函数 fromwhere 条件;

聚合函数例子:

  • 求和sum()
  • 求平均值avg()
  • 求最大值max()
  • 求最小值min()
  • 求元素个数count()

注意:SQL语句是基于需求实现的,同一个需求可能出现n多种SQL写法。如果SQL语句没有需求背景,SQL如无根之水,毫无意义。

【案例】

-- 求所有商品价格的总和
select sum(price) from products;
-- 显示的比较模糊 就用别名
select sum(price) as 所有商品总价 from products;

-- 求所有商品的平均价格/最小价格/最高价格
select avg(price) as 商品平均价格, max(price) as 最大商品价格, min(price) as 商品最小价格 from  products;

-- 元素个数
select count(*) from products;

分组查询

分组查询:作用将查询结果按照某列数据来进行分组呈现

-- 语法格式
select 列名 fromwhere group by 分组字段 having 条件; 

注意:

  • select 语句中的列必须出现在 group by 的子句中。
  • group by的列,不一定非要出现在select列中。
  • 聚合函数只能出现在select列,或者是having语句中,一定不能出现在where条件中。

【案例】

-- 需求
-- 统计,指定分类下商品的个数
select sid as 商品分类, count(*) as 商品个数 from products group by sid;

-- 统计,某类商品的平均价格,商品的平均价不能低于60
select sid as 商品分类 , avg(price) as 商品的平均价格 from products group by sid  having avg(price) >= 60;

分页查询

关键字: limit[offset] rows

分页查询:作用是将查询的结果按照一页一页的形式输出。

-- 语法
selectfromlimit offset, lenght

【案例】

-- 分页查询,将数据分为三页,查询第一页数据
select * from products limit 0, 2;
-- 0 代表偏移量(开始行数)# 这个值是算出来的 那么么第二页开始就是 2 2
-- 2 每页显示的行数

limit 关键字不是SQL92标准提出的关键字,它是MySQL独有的语法

通过 limit 关键字,MySQL实现了物理分页。

分页分为逻辑分页物理分页

逻辑分页:将数据库中的数据查询到内存之后再进行分页。

物理分页:通过 LIMIT 关键字,直接再数据库中进行分页,最终返回的数据,只是分页后的数据。

【输出】

# 第一页输出
mysql> select * from products limit 0, 2;
+-----+-----------------+-------+-------+------+
| pid | pname           | price | pdate | sid  |
+-----+-----------------+-------+-------+------+
|   1 | 泰国大榴莲      |    98 | NULL  | s001 |
|   2 | 新疆大枣        |    38 | NULL  | s002 |
+-----+-----------------+-------+-------+------+
# 第二页输出
mysql> select * from products limit 2, 2;
+-----+--------------+-------+-------+------+
| pid | pname        | price | pdate | sid  |
+-----+--------------+-------+-------+------+
|   3 | 新疆切糕     |    68 | NULL  | s001 |
|   4 | 十三香       |    10 | NULL  | s002 |
+-----+--------------+-------+-------+------+

纸上得来终觉浅,觉知代码要躬行

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值