sql表的查询排序

-- 修改表数据语法
-- 关键字 UPDATE
-- UPDATE 表名 SET 列名1 = 值1,列名2 = 值2,... [where 条件];
-- SET 列名1 = 值1,列名2 = 值2,...这是要修改的内容
-- where 条件]是指定要修改的字段如果没有就,默认把全部与之相同的修改
UPDATE sus SET name='rose',socore=12 WHERE name="li";
UPDATE sus set id=4 WHERE id=1;
-- 查询所有表数据
SELECT * FROM sus;

-- 删除表数据
-- DELETE FROM 表名 [WHERE 条件];
-- 后面的[WHERE 条件];主要是为了找出你要删除哪一行的数据
DELETE FROM sus WHERE id=4;

-- 插入数据
-- 新增格式1:给指定列添加数据
-- INSERT INTO 表名(列名1,列名2,...) VALUES (值1,值2,...);
INSERT INTO product(id,NAME,price,stock,insert_time) VALUES (1,'手机',1999,22,'2099-09-09');
SELECT * FROM product;

-- 向product表添加指定列数据
INSERT INTO product (brand) VALUES ('电脑');

-- 默认给全部列添加数据
-- INSERT INTO 表名 VALUES (值1,值2,值3,...);
INSERT INTO sus VALUES (56,'电视',45,'2099-06-06');(常用)
desc sus;
SELECT * FROM sus;
-- 列名和值的数量以及数据类型要对应
-- 除了数字类型,其他数据类型的数据都需要加引号(单引双引都可以,推荐单引)

-- 表单的查询

-- 创建db1数据库
-- CREATE DATABASE db1;

-- 使用db1数据库
-- USE db1;

-- 创建数据表(创建表很重要)
CREATE TABLE product(
    id INT,                -- 商品编号
    NAME VARCHAR(20),    -- 商品名称
    price DOUBLE,        -- 商品价格
    brand VARCHAR(10),    -- 商品品牌
    stock INT,            -- 商品库存
    insert_time DATE    -- 添加时间
);

-- 添加数据
INSERT INTO product VALUES (1,'华为手机',3999,'华为',23,'2088-03-10'),
(2,'小米手机',4999,'小米',30,'2088-05-15'),
(3,'苹果手机',5999,'苹果',18,'2088-08-20'),
(4,'华为电脑',6999,'华为',14,'2088-06-16'),
(5,'小米电脑',4899,'小米',26,'2088-07-08'),
(6,'苹果电脑',10999,'苹果',15,'2088-10-25'),
(7,'联想电脑',7999,'联想',NULL,'2088-11-11');

-- 查询语法
-- select
#    字段列表

-- 查询全部
-- SELECT * FROM 表名;
SELECT * FROM product;

-- 查询部分
-- SELECT 列名1,列名2,... FROM 表名;
SELECT NAME,price,brand FROM product;

-- 去除重复查询
-- 注意:只有全部重复的才可以去除
SELECT DISTINCT name FROM product;

-- 计算列的值
-- SELECT 列名1 运算符(+ - * /) 列名2 FROM 表名;

-- 查询商品名称和库存,库存数量在原有基础上加10
SELECT NAME,stock+10 FROM product;

-- 查询商品名称和库存,库存数量在原有基础上加10。进行null值判断
-- IFNULL(stock,0)找出为空的,把它赋值为在进行计算
SELECT NAME,IFNULL(stock,0)+10 FROM product;

-- 起别名
-- SELECT 列名1,列名2,... AS 别名 FROM 表名;

-- 查询商品名称和库存,库存数量在原有基础上加10。进行null值判断。起别名为getSum
SELECT NAME,IFNULL(stock,0)+10 AS getsum FROM product;
SELECT NAME,IFNULL(stock,0)+10 getsum FROM product;

-- 条件查询
/*| >                   | 大于                                   |
| ------------------- | -------------------------------------- |
| <                   | 小于                                   |
| >=                  | 大于等于                               |
| <=                  | 小于等于                               |
| =                   | 等于                                   |
| <> 或 !=            | 不等于                                 |
| BETWEEN ... AND ... | 在某个范围之内(都包含)                 |
| IN(...)             | 多选一                                 |
| LIKE 占位符         | 模糊查询  _单个任意字符  %多个任意字符 |
| IS NULL             | 是NULL                                 |
| IS NOT NULL         | 不是NULL                               |
| AND 或 &&           | 并且                                   |
| OR 或 \|\|          | 或者                                   |
| NOT 或 !            | 非,不是                               |*/


#where
    #条件列表
-- 条件查询
-- SELECT 列名 FROM 表名 WHERE 条件;

-- 查询库存价格大于3000的商品信息
SELECT * FROM product WHERE price > 3000;

--  查询品牌为华为的商品信息
SELECT * FROM product WHERE brand='华为';

-- 查询金额在5000 ~ 10000之间的商品信息
SELECT * FROM product WHERE price>5000 AND price<10000;
SELECT * FROM product WHERE price BETWEEN 5000 and 10000;

-- 查询库存为14、30、23的商品信息
SELECT * FROM product WHERE stock=14 OR stock=30 OR stock=23;
SELECT * FROM product WHERE stock IN(14,30,23);

-- 查询库存为null的商品信息
SELECT * FROM product WHERE stock IS NULL;

-- 查询库存部为null的商品信息
SELECT * FROM product WHERE stock IS not NULL and brand is not null;

-- 查询名称以小米为开头的商品信息
SELECT * FROM product WHERE NAME LIKE '小米%';

-- 查询名称以苹果为开头的商品信息
SELECT * from product WHERE NAME like '苹果%';

-- _表示占一个字符
-- %表示占0个或多个字符

-- 查询名称第二个字是为的商品信息
SELECT * FROM product WHERE NAME LIKE '_为%';

-- 查询名称为四个字符的商品信息
SELECT * FROM product WHERE NAME LIKE '____';

-- 查询名称中包含电脑的商品信息
SELECT * FROM product WHERE NAME LIKE '%电脑%';

#聚合函数
/*| count(列名) | 统计数量(一般选用不为null的列) |
| ----------- | ------------------------------ |
| max(列名)   | 最大值                         |
| min(列名)   | 最小值                         |
| sum(列名)   | 求和                           |
| avg(列名)   | 平均值                         |*/

-- SELECT 函数名(列名) FROM 表名 [WHERE 条件];
计算product表中总记录条数
SELECT COUNT(*) FROM product; 

-- 获取最高价格
SELECT MAX(price) FROM product;

-- 获取最高库存
SELECT MAX(stock) FROM product;

-- 获取最高价格的商品名称
SELECT NAME,price FROM product WHERE price = (SELECT MAX(price) FROM product);

-- 获取最低库存
SELECT MIN(stock) FROM product;

-- 获取最低库存的商品名称
SELECT NAME,stock FROM product WHERE stock = (SELECT MIN(stock) FROM product);

-- 获取最高库存的商品名称和价格
-- FROM不要忘记写
SELECT NAME,price,stock FROM product WHERE stock = (SELECT max(stock) FROM product);

-- 获取总库存数量
SELECT SUM(stock) FROM product;
-- 获取品牌为苹果的总库存数量
SELECT SUM(stock) FROM product WHERE brand='苹果';

-- 获取品牌为小米的平均商品价格
SELECT AVG(price) FROM product WHERE brand='小米';


#group by
#    分组字段

#having
#    分组之后的条件

#order by
#排序
-- 排序分类
-- 注意:多个排序条件,当前边的条件值一样时,才会判断第二条件
-- 语法
-- ORDER BY 列名1 排序方式1,列名2 排序方式2对指定列排序,ASC升序(默认的)  DESC降序
-- SELECT 列名 FROM 表名 [WHERE 条件] ORDER BY 列名1 排序方式1,列名2 排序方式2;

-- 按照库存升序排序
SELECT * FROM product ORDER BY stock ASC;

-- -- 按照库存降序排序
SELECT * FROM product ORDER BY stock DESC;

-- -- 查询名称中包含手机的商品信息。按照金额降序排序
SELECT * FROM product WHERE NAME LIKE '%手机%' ORDER BY price DESC;

-- 查询名称中包含手机的商品信息。按照金额升序排序
SELECT * FROM product WHERE NAME LIKE '%手机%' ORDER BY price ASC;

-- 按照金额升序排序,如果金额相同,按照库存降序排列
SELECT * FROM product ORDER BY price ASC,stock DESC;

-- 分组查询
-- 标准语法
-- SELECT 列名 FROM 表名 [WHERE 条件] GROUP BY 分组列名 [HAVING 分组后条件过滤] [ORDER BY 排序列名 排序方式];

-- 按照品牌分组,获取每组商品的总金额
SELECT brand,SUM(price) FROM product GROUP BY brand;

-- 对金额大于4000元的商品,按照品牌分组,获取每组商品的总金额
SELECT brand,SUM(price) FROM product WHERE price > 4000 GROUP BY brand;

-- 对金额大于4000元的商品,按照品牌分组,获取每组商品的总金额,只显示总金额大于7000元的
SELECT brand,SUM(price) AS getSum FROM product WHERE price > 4000 GROUP BY brand HAVING getSum > 7000;

-- 对金额大于4000元的商品,按照品牌分组,获取每组商品的总金额,只显示总金额大于7000元的、并按照总金额的降序排列
SELECT brand,SUM(price) AS getSum FROM product WHERE price > 4000 GROUP BY brand HAVING getSum > 7000 ORDER BY getSum DESC;

#limit
    #分页限定
/**SELECT 列名 FROM 表名 [WHERE 条件] GROUP BY 分组列名 [HAVING 分组后条件过滤] [ORDER BY 排序列名 排序方式] LIMIT 开始索引,查询条数;
-- 公式:开始索引 = (当前页码-1) * 每页显示的条数*/

SELECT * FROM product LIMIT 0,2;  -- 第一页 开始索引=(1-1) * 2
SELECT * FROM product LIMIT 2,2;  -- 第二页 开始索引=(2-1) * 2
SELECT * FROM product LIMIT 4,2;  -- 第三页 开始索引=(3-1) * 2
SELECT * FROM product LIMIT 6,2;  -- 第四页 开始索引=(4-1) * 2


-- 约束
/**#### 1.约束的概念和分类

- 约束的概念
  - 对表中的数据进行限定,保证数据的正确性、有效性、完整性!
- 约束的分类

| 约束                          | 说明           |
| ----------------------------- | -------------- |
| PRIMARY KEY                   | 主键约束       |
| PRIMARY KEY AUTO_INCREMENT    | 主键、自动增长 |
| UNIQUE                        | 唯一约束       |
| NOT NULL                      | 非空约束       |
| FOREIGN KEY                   | 外键约束       |

| FOREIGN KEY ON UPDATE CASCADE | 外键级联更新   |
| FOREIGN KEY ON DELETE CASCADE | 外键级联删除   |

#### 2.主键约束

- 主键约束特点
  - 主键约束包含:非空和唯一两个功能
  - 一张表只能有一个列作为主键
  - 主键一般用于表中数据的唯一标识
- 建表时添加主键约束*/

-- 创建student表
-- 建表时添加主键约束
CREATE TABLE student(
    id INT PRIMARY KEY  -- 给id添加主键约束
);

-- 添加数据
INSERT INTO student VALUES (1),(2);
-- 主键默认唯一,添加重复数据,会报错
INSERT INTO student VALUES (2);
-- 主键默认非空,不能添加null的数据
INSERT INTO student VALUES (NULL);

-- 查询student表
SELECT * FROM student;
-- 查询student表详细
DESC student;

ALTER TABLE student drop PRIMARY key;
/**- 删除主键
-- 标准语法
ALTER TABLE 表名 DROP PRIMARY KEY;

-- 删除主键
ALTER TABLE student DROP PRIMARY KEY;

- 建表后单独添加主键

-- 标准语法
ALTER TABLE 表名 MODIFY 列名 数据类型 PRIMARY KEY;

-- 添加主键
ALTER TABLE student MODIFY id INT PRIMARY KEY;

 */

-- 主键自增长约束
---- 建表语句
/**CREATE TABLE 表名(
    列名 数据类型 PRIMARY KEY AUTO_INCREMENT,
    列名 数据类型,
    ...
);*/
#如果添加的id是重复的,因为有主键约束,则添加不上,其实这是计算也为你添加错误的分配了ID号,则下次在添加正确,会与你添加的次数相等
CREATE TABLE student2(
    id INT PRIMARY KEY AUTO_INCREMENT    -- 给id添加主键自增约束
);

-- 添加数据
INSERT INTO student2 VALUES (1),(2);
-- 添加null值,会自动增长
INSERT INTO student2 VALUES (NULL),(NULL);

-- 查询student2表
SELECT * FROM student2;
-- student2表详细
DESC student2;

-- - 删除自动增长


-- 标准语法
ALTER TABLE 表名 MODIFY 列名 数据类型;

-- 删除自动增长
ALTER TABLE student2 MODIFY id INT;


-- 建表后单独添加自动增长


-- 标准语法
ALTER TABLE 表名 MODIFY 列名 数据类型 AUTO_INCREMENT;

-- 添加自动增长
ALTER TABLE student2 MODIFY id INT AUTO_INCREMENT;


 4.唯一约束
- 建表时添加唯一约束


-- 标准语法
CREATE TABLE 表名(
    列名 数据类型 UNIQUE,
    列名 数据类型,
    ...
);

-- 创建student3表
CREATE TABLE student3(
    id INT PRIMARY KEY AUTO_INCREMENT,
    tel VARCHAR(20) UNIQUE    -- 给tel列添加唯一约束
);

-- 添加数据
INSERT INTO student3 VALUES (NULL,'18888888888'),(NULL,'18666666666');
-- 添加重复数据,会报错
INSERT INTO student3 VALUES (NULL,'18666666666');

-- 查询student3数据表
SELECT * FROM student3;
-- student3表详细
DESC student3;


- 删除唯一约束


-- 标准语法
ALTER TABLE 表名 DROP INDEX 列名;

-- 删除唯一约束
ALTER TABLE student3 DROP INDEX tel;


- 建表后单独添加唯一约束


-- 标准语法
ALTER TABLE 表名 MODIFY 列名 数据类型 UNIQUE;

-- 添加唯一约束
ALTER TABLE student3 MODIFY tel VARCHAR(20) UNIQUE;


#### 5.非空约束

- 建表时添加非空约束

-- 标准语法
CREATE TABLE 表名(
    列名 数据类型 NOT NULL,
    列名 数据类型,
    ...
);

-- 创建student4表
CREATE TABLE student4(
    id INT PRIMARY KEY AUTO_INCREMENT,
    NAME VARCHAR(20) NOT NULL    -- 给name添加非空约束
);

-- 添加数据
INSERT INTO student4 VALUES (NULL,'张三'),(NULL,'李四');
-- 添加null值,会报错
INSERT INTO student4 VALUES (NULL,NULL);


- 删除非空约束

-- 标准语法
ALTER TABLE 表名 MODIFY 列名 数据类型;

-- 删除非空约束
ALTER TABLE student4 MODIFY NAME VARCHAR(20);


- 建表后单独添加非空约束

 
  -- 标准语法
  ALTER TABLE 表名 MODIFY 列名 数据类型 NOT NULL;
  
  -- 添加非空约束
  ALTER TABLE student4 MODIFY NAME VARCHAR(20) NOT NULL;


  

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值