Sql 语句

数据库概述:

数据库(DataBase,DB):指长期保存在计算机的存储设备上,按照一定规则组织起来,可以被各种用户或应用共享的数据集合。(文件系统)

数据库管理系统(DataBase Management System,DBMS):指一种操作和管理数据库的大型软件,用于建立、使用和维护数据库,对数据库进行统一管理和控制,以保证数据库的安全性和完整性。用户通过数据库管理系统访问数据库中的数据。

数据库软件应该为数据库管理系统,数据库是通过数据库管理系统创建和操作的。

数据库:存储、维护和管理数据的集合。

MySql和SQLite区别

SQLite是单机数据库。功能简约,小型化,追求最大磁盘效率
MySql是完善的服务器数据库。功能全面,综合化,追求最大并发效率
MySql、Sybase、Oracle等这些都是试用于服务器数据量大功能多需要安装,例如网站访问量比较大的。而SQLite是一款小型数据库,简单移植性好无需安装只需要几个文件。一般手机,终端等用的比较多~

如一句话,如果只是单机上用的,数据量不是很大,程序上对数据的处理也不太复杂的话,就用SQLite比较合适,它轻量级,单文件,可加密,方便小型程序的使用,其他情况建议使用MySql

使用MySql
  • 登录Mysql:
    mysql -u 用户名 -p 回车 , 在提示输入密码时再输入密码

  • 卸载
    1.停止mysql服务 net stop mysql 启动mysql服务 net start mysql
    2.卸载mysql
    3.找到mysql 安装目录下的 my.ini datadir=”C:/ProgramData/MySQL/MySQL Server 5.5/Data/”

  • 修改密码
    运行cmd
    安装成功了打开cmd –> mysql -u 用户名-p 你的密码
    修改mysql 用户密码:

  • 停止mysql服务 运行输入services.msc 停止mysql服务,或者 cmd –> net stop mysql

  • 在cmd下 输入 mysqld –skip-grant-tables 启动服务器 光标不动 (不要关闭该窗口)

  • 新打开cmd 输入mysql -u 用户名-p 不需要密码
    use mysql;
    update user set password=password('abc') WHERE User='root';

  • 关闭两个cmd窗口 在任务管理器结束mysqld 进程

  • 在服务管理页面 重启mysql 服务 ,密码修改完成

  • 也可以使用 SQLyog操作数据库,SQLyog 是一个易于使用的、快速而简洁的图形化管理MYSQL数据库的工具,它能够在任何地点有效地管理你的数据库

往MySQL里导入数据的时候遇到一个报错:Error : Incorrect string value: '\xE5\x8C\x97\xE4\xBA\xAC' for column 'Name' at row 1
原因:默认字符集问题
以下为错误的创建语句:

CREATE TABLE `City` (
  `CityID` int(11) NOT NULL,
  `ProvinceID` int(11) DEFAULT NULL,
  `Name` varchar(50) CHARACTER SET latin1 DEFAULT NULL,
  PRIMARY KEY (`CityID`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8

而以前都用的gbk_chinese_ci,
解决方法:把默认字符集修改过来,修改为字段的字符集为gbk即可ALTER TABLE City CONVERT TO CHARACTER SET gbk;
也可以在创建表的时候设置默认字符集:

CREATE TABLE `City ` (
  `CityID` int(11) NOT NULL,
  `ProvinceID` int(11) DEFAULT NULL,
  `Name` varchar(50) CHARACTER SET latin1 DEFAULT NULL,
  PRIMARY KEY (`CityID`)
) ENGINE=InnoDB DEFAULT CHARSET=gbk ROW_FORMAT=COMPACT

Sql语句的分类
  • DDL(Data Definition Language):数据定义语言,用来定义数据库对象:库、表、列等; CREATE、 ALTER、DROP
  • DML(Data Manipulation Language):数据操作语言,用来定义数据库记录(数据); INSERT、 UPDATE、 DELETE
  • DCL(Data Control Language):数据控制语言,用来定义访问权限和安全级别;
  • DQL(Data Query Language):数据查询语言,用来查询记录(数据):SELECT
  • 注意:sql语句以;结尾
MySql命令alter add:增加表的字段

alter add命令用来增加表的字段。

alter add命令格式:alter table 表名 add字段 类型 其他;

例如,在表MyClass中添加了一个字段passtest,类型为int(4),默认值为0:
alter table MyClass add passtest int(4) default '0';

  1. 加索引
    alter table 表名 add index 索引名 (字段名1[,字段名2 …]);

例子: alter table employee add index emp_name (name);

  1. 加主关键字的索引
    alter table 表名 add primary key (字段名);

例子: alter table employee add primary key(id);

  1. 加唯一限制条件的索引
    alter table 表名 add unique 索引名 (字段名);

例子: alter table employee add unique emp_name2(cardnumber);

  1. 删除某个索引
    alter table 表名 drop index 索引名;

例子: alter table employee drop index emp_name;

  1. 增加字段
    ALTER TABLE table_name ADD field_name field_type;

  2. 修改原字段名称及类型
    ALTER TABLE table_name CHANGE old_field_name new_field_name field_type;
    例子,原字段birthday写错了,修改下字段名称:
    ALTER TABLE users CHANGE birthady birthday VARCHAR(50);

  3. 删除字段
    ALTER TABLE table_name DROP field_name

DDL:操作数据库、表、列等 —————————————–

使用的关键字:CREATE、 ALTER、 DROP

— 操作数据库 ———————————————————————

— 创建
— 创建一个名称为mydb2的数据库
CREATE DATABASE IF NOT EXISTS mydb2;
— 创建一个名称为mydb2的数据库,并设置其字符集为gbk
CREATE DATABASE IF NOT EXISTS mydb2 CHARACTER SET gbk;
— 查询
— 查看当前数据库服务器中所有的数据库
SHOW DATABASES;
— 查看前面创建的mydb2数据库定义的信息
SHOW CREATE DATABASE mydb2;

— 修改
— 查看服务器中的数据库,并把mydb2的字符集修改为utf8
ALTER DATABASE mydb2 CHARACTER SET utf8;

— 删除
— 删除前面创建的mydb2数据库
DROP DATABASE mydb2;

— 其他
— 查看当前使用的数据库
SELECT DATABASE();
— 切换使用名称为mydb2的数据库
USE mydb2;

— 操作数据表 ———————————————————————
— 创建表
— 语法:

    字段1 字段类型,
    字段2 字段类型,
    ....
);```
-- 注意:创建表之前,要切换到对应的数据中


-- 查看当前数据库中所有的表
```SHOW TABLES;```
-- 查看某个表中所有字段的信息
```DESC 表名称;```
-- 在表名为emp的员工表的基础上增加一个image列(即image字段)
```ALTER TABLE emp ADD image BLOB; ```
-- 修改job列, 使其长度为60
```ALTER TABLE emp MODIFY job VARCHAR(60);```
-- 删除image列,一次只删一列
```ALTER TABLE emp DROP image;```
-- 修改emp表名称为user1
```RENAME TABLE emp TO user1;```
-- 修改表的字符集gbk
```ALTER TABLE user1 CHARACTER SET utf8;```
-- 修改列名ename为username
```ALTER TABLE user1 CHANGE ename username VARCHAR(100);```

-- 删除表
```DROP TABLE user1;```

######  DML数据操作语言,用来定义数据库记录 -----------------------------------------
> DML 是对表中的数据进行增、删、改的操作
 使用的关键字:INSERT、UPDATE、DELETE
 注意:在MySql中,字符串类型和日期类型的数据都要使用单引号括起来,空值为NULL

-- 插入操作 INSERT: ------------------
-- 语法:``` INSERT INTO 表名(列名1,列名2 ...)VALUES(列值1,列值2...);```
-- 注意:
-- 1.列名与列值的类型、个数、顺序要一一对应。
-- 2.可以把列名当做java中的形参,把列值当做实参。值不要超出列定义的长度。
-- 3.如果插入空值,请使用null
-- 4.插入的日期和字符一样,都使用引号括起来。

-- 给emp中插入一行数据
```INSERT INTO emp(id,NAME,gender,birthday,salary,entry_date,RESUME)
VALUES(1,'zhangsan','female','1990-5-10',10000,'2015-5-5-','good girl');```
-- 批量插入
```INSERT INTO emp VALUES
(4,'zs','m','2015-09-01',10000,'2015-09-01',NULL),
(5,'li','m','2015-09-01',10000,'2015-09-01',NULL),
(6,'ww','m','2015-09-01',10000,'2015-09-01',NULL);```

-- 修改操作 UPDATE ----------
-- 语法:```UPDATE 表名 SET 列名 1=列值 2... WHERE 列名=值```
-- 将所有的员工薪水修改为5000元
```UPDATE emp SET sal=5000;```
-- 将姓名为'ALLEN'的员工修改为3000元
``` UPDATE emp SET sal=3000 WHERE username='ALLEN';```
-- 将姓名为'ALLEN'的员工薪水修改为10000, job修改为CTO
```UPDATE emp SET sal=10000,job='CTO' WHERE username='ALLEN';```
-- 将姓名为’ALLEN‘的员工咋原有薪水基础上增加1000
```UPDATE emp SET sal=sal+1000 WHERE username='ALLEN';```

-- 删除操作 DELETE ------------------------
-- 语法``` DELETE FROM 表名 [where 列名=值]```
-- 删除emp表中 名称 为 ’ALLEN‘的记录
```DELETE FROM emp WHERE username='ALLEN';```
-- 删除 emp 表中 所有记录
```DELETE FROM emp;```
-- 使用truncate删除emp表中记录
```TRUNCATE TABLE emp;```
-- 注意:
-- 1.DELETE 删除表中的数据,表结构还在;删除后的数据可以找回
-- 2.TRUNCATE 删除是把表直接DROP掉,然后再创建一个同样的新表。删除的数据不能找回。执行速度比DELETE快。


###### DQL(数据查询语法)-----------------------------------------
>DQL就是数据查询语言,数据库执行DQL语句不会对数据进行改变,而是让数据库发送结果集给客户端:

-- 语法:
-- select selection_list -- 要查询的列名称
-- From table_list -- 要查询的表名称
-- group by grounping_columns -- 对结果进行分组
-- having condition -- 分组后的行条件
-- order by sorting_columns -- 对结果进行排序
-- limit offset_satrt,row_count -- 结果限定

-- 向emp表中添加数据

INSERT INTO emp(id,NAME, gender, birthday, salary, entry_date, RESUME)
VALUES(1,’ossey’,’g’,’2011-01-09′, 20000, ‘2012-11-10′,’verygood boy’);

INSERT INTO emp(id, NAME, gender, birthday, salary, entry_date, RESUME)
VALUES(2,’sey’,’g’,’2010-02-08′,20000,’2013-10-11′,’good boy’);
INSERT INTO emp(id, NAME, gender, birthday, salary, entry_date, RESUME)
VALUES(3, ‘郑爽’,’mm’, ‘2013-01-01’,3000, ‘2015-03-09′,’good girl’);

INSERT INTO emp(id, NAME, gender, birthday, salary, entry_date, RESUME)
VALUES(4, ‘周杰伦’,’g’,’2015-02-03′,3000, ‘2016-03-08’, ‘good boy’);


-- 将所有员工薪水修改为5000元
```UPDATE    emp SET     salary=5000;```

-- 将姓名为‘sey’的员工薪水修改为3000
```UPDATE    emp SET    salary=30000 WHERE NAME='sey';```

-- 将姓名为‘ossey’的员工薪水修改为40000,性别修改为女
```UPDATE   emp SET salary=40000,gender='g' WHERE NAME='ossey';```

-- 将员工‘sey’的薪水在原有基础上增加10000
```UPDATE emp SET salary=salary+10000 WHERE NAME='sey';```

-- Delete语句
-- 删除表中名称为'sey'的语句
```DELETE FROM emp WHERE NAME='sey';``  

-- 删除表中所有记录
```DELETE FROM emp;```
-- 使用truncate删除表中记录, 删除过程:会将表直接drop删除掉,再创建一个相同结构的空表
```TRUNCATE TABLE emp;```

```SELECT   * FROM emp;```

-- 查询语句
```SELECT * FROM USER;```

-- 查询以s开头的姓名
```SELECT   * FROM emp WHERE NAME LIKE 's%';```

-- 查询第二个字母以o开头的姓名
```SELECT * FROM emp WHERE NAME LIKE '%o%';```

-- 查询有姓名的个数
 
 
 -- 创建学生表 ------------------------------
 ```CREATE TABLE stu(
    sid CHAR(6),
    sname VARCHAR(50),
    age INT,
    gender VARCHAR(50)
 );```
 
-- 查看表
```SELECT * FROM stu;```

-- 插入数据

INSERT INTO stu VALUES(‘S_1001’, ‘LiuYi’, 35, ‘male’);
INSERT INTO stu VALUES(‘S_1002’, ‘ChenEr’, 15, ‘female’);
INSERT INTO stu VALUES(‘S_1003’, ‘ZhangSan’, 95, ‘male’);
INSERT INTO stuo VALUES(‘S_1004’, ‘LiSi’, 65, ‘male’);
INSERT INTO stuo VALUES(‘S_1005’, ‘WangWu’, 55, ‘male’);
INSERT INTO stu VALUES(‘S_1006’, ‘zhaoLiu’, 75, ‘female’);
INSERT INTO stu VALUES(‘S_1007’, ‘sunQi’, 25, ‘male’);
INSERT INTO stu VALUES(‘S_1008’, ‘zhouBa’, 45, ‘female’);
INSERT INTO stu VALUES(‘S_1009’, ‘wuJiu’, 85, ‘male’);
INSERT INTO stu VALUES(‘S_1010’, ‘zhengShi’, 5, ‘female’);
INSERT INTO stu VALUES(‘S_1011’, ‘xxxx’, NULL, NULL);


-- 创建雇员表 emp -----------------------------------------------------------
```CREATE TABLE emp(
    empno INT,          -- 员工编号
    ename VARCHAR(50),  -- 员工姓名
    job VARCHAR(50),    -- 员工工作
    mgr INT,        --  领导编号
    hiredate DATE,      -- 入职日期
    sal DECIMAL(7,2),   -- 月薪
    comm DECIMAL(7,2),  -- 奖金
    deptno INT      -- 部门编号
);```

-- 插看emp表
```SELECT * FROM emp;```

-- 给emp表中插入以下数据

INSERT INTO emp VALUES(7369,’SMITH’,’CLERK’,7902,’1980-12-17′,800,NULL,20);
INSERT INTO emp VALUES(7499,’ALLEN’,’SALESMAN’,7698,’1981-02-20′,1600,300,30);
INSERT INTO emp VALUES(7521,’WARD’,’SALESMAN’,7698,’1981-02-22′,1250,500,30);
INSERT INTO emp VALUES(7566,’JONES’,’MANAGER’,7839,’1981-04-02′,2975,NULL,20);
INSERT INTO emp VALUES(7654,’MARTIN’,’SALESMAN’,7698,’1981-09-28′,1250,1400,30);
INSERT INTO emp VALUES(7698,’BLAKE’,’MANAGER’,7839,’1981-05-01′,2850,NULL,30);
INSERT INTO emp VALUES(7782,’CLARK’,’MANAGER’,7839,’1981-06-09′,2450,NULL,10);
INSERT INTO emp VALUES(7788,’SCOTT’,’ANALYST’,7566,’1987-04-19′,3000,NULL,20);
INSERT INTO emp VALUES(7839,’KING’,’PRESIDENT’,NULL,’1981-11-17′,5000,NULL,10);
INSERT INTO emp VALUES(7844,’TURNER’,’SALESMAN’,7698,’1981-09-08′,1500,0,30);
INSERT INTO emp VALUES(7876,’ADAMS’,’CLERK’,7788,’1987-05-23′,1100,NULL,20);
INSERT INTO emp VALUES(7900,’JAMES’,’CLERK’,7698,’1981-12-03′,950,NULL,30);
INSERT INTO emp VALUES(7902,’FORD’,’ANALYST’,7566,’1981-12-03′,3000,NULL,20);
INSERT INTO emp VALUES(7934,’MILLER’,’CLERK’,7782,’1982-01-23′,1300,NULL,10);

-- 创建emp的部门表 -------------
```CREATE TABLE dept(
    deptno INT,     -- 部门编号
    dname VARCHAR(14),  -- 部门名称
    loc VARCHAR(13)     -- 部门位置
);```

-- 查看dept表
```SELECT * FROM dept;```
-- 给部门表插入以下数据

INSERT INTO dept VALUES(10, ‘ACCOUNTING’, ‘NEW YORK’);
INSERT INTO dept VALUES(20, ‘RESEARCH’, ‘DALLAS’);
INSERT INTO dept VALUES(30, ‘SALES’, ‘CHICAGO’);
INSERT INTO dept VALUES(40, ‘OPERATIONS’, ‘BOSTON’);

-- 1.基础查询 -------------
-- 1.1 查询所有列
```SELECT * FROM emp;```
-- 1.2 查询指定列,比如查询emp表中ename和deptno字段的数据
```SELECT ename, deptno FROM emp;```

-- 2.条件查询 -------------
-- 2.1 查询部门为30,并且奖金少于1000的员工
```SELECT *FROM emp WHERE deptno=30 AND comm<1000;```
-- 2.2 查询 ename为ALLEN 或者 ename为WARD的员工信息
```SELECT * FROM emp WHERE ename='ALLEN' OR ENAME='WARD';```
-- 2.3 查询deptno部门编号为20,30,50的记录
```SELECT * FROM emp WHERE deptno IN(20,30,50);```
-- 2.4 查询部门编号不是20,30, 50的记录
```SELECT * FROM emp WHERE deptno NOT IN(20, 30, 50);```
-- 2.5 查询奖金为null的记录
```SELECT * FROM emp WHERE comm IS NULL;```
-- 2.6 查询奖金在1000到1500之间的记录
-- 第一种写法
```SELECT * FROM emp WHERE comm>=1000 AND comm<=1500;```
-- 第二种写法
```SELECT * FROM emp WHERE comm BETWEEN 1000 AND 1500;```
-- 2.7 查询奖金为非空的员工记录
```SELECT * FROM emp WHERE comm IS NOT NULL;```

 -- 3 模糊查询 -----------------------------------
 -- 当想查询姓名中包含a字母的员工时,就需要使用到模糊查询了,模糊查询需要使用关键字 LIKE
 -- 3.1 查询ename由5个字母构成的员工记录 
 ```SELECT * FROM emp WHERE ename LIKE '_____'; ```-- 5条下划线就是5个记录 
 -- 模糊查询必须使用LIKE关键字。其中'_'匹配任意一个字母,5个'_'表示5个任意字母
 
-- 3.2 查询姓名由5个字母构成,并且第5个字母为’s‘的员工记录
```SELECT * FROM emp WHERE ename LIKE '____s';```
-- 3.3 查询员工姓名以'J'开头的员工记录
```SELECT * FROM emp WHERE ename LIKE 'J%';```
-- 其中'%'匹配0~n个任意字母
-- 3.4 查询姓名中第二个字母为's'的员工记录
```SELECT * FROM emp WHERE ename LIKE '%s%';```

 -- 4 字段控制查询 -----------------------------------
 -- 4.1 去除重复记录
 -- 去除重复记录(两行或两行以上记录的数据都相同的), 例如emp表中sal字段就存在相同的记录。当之查询emp表中sal字段时,那么回出现重复记录,需要使用关键字DISTINCT
``` SELECT DISTINCT sal FROM emp;```
 -- 4.1 查看关于的月薪和佣金之和
 -- 因为sal(基本工资)和comm(奖金)两列的类型都是数值类型,所以可以做加法运算。但是如果sal或comm字段中有一个字段不是数值类型,那么就会出错;
 -- 当然如果sal或者comm中其中一个字段的值为NULL时,相加时也为NULL,所以需要在相加时做判断:如果为NULL,就为0,否则为原始值,需要使用关键字IFNULL();
``` SELECT *, sal+IFNULL(comm,0) FROM emp;```
 -- 4.3 给列名添加别名
 -- 在上面查询结果中出现列名为sal+ifnull(comm,0),这样很不美观,现在我们给这一列添加别名为total:
 -- 给列起别名时,是可以省略AS关键字的
 ```SELECT *,sal+IFNULL(comm,0) AS total FROM emp;```
 
 -- 5 排序 -----------------------------------
 -- 5.1 查询所有员工记录,按照部门升序排序
 ```SELECT * FROM emp ORDER BY deptno ASC;```
 -- 或者使用以下语句 省略ASC,ORDER BY 默认就是升序的
``` SELECT * FROM emp ORDER BY deptno;```
 -- 5.2 查询所有员工记录,按照部门降序排序
``` SELECT * FROM emp ORDER BY deptno DESC;```
 -- 5.2 查询所有员工,按照月薪降序排序,如果月薪相同时,按照部门升序排序
``` SELECT * FROM emp ORDER BY sal DESC , deptno ASC;```
 
 -- 6 聚合函数 -----------------------------------
 -- 聚合函数是用来做纵向运算的函数:
 -- COUNT(): 统计指定列不为NULL的记录行数;
 -- MAX(): 计算指定列的最大值,如果指定列是字符串类型,那么使用字符串排序运算;
 -- MIN(): 计算指定列的最小值,如果制定列是字符串类型,那么使用字符串排序运算;
 -- SUM(): 计算指定列的数值和,如果指定列类型不是数值类型,那么计算结果为0;
 -- AVG(): 计算指定列的平均值,如果指定列类型不是数值类型,那么计算结果为0;
 
 -- 6.1 COUNT
 -- 当需要纵向统计时使用COUNT();
 -- 查询emp表中记录数:
``` SELECT COUNT(*) AS 数量 FROM emp;```
 -- 查询emp表中有佣金的人数
``` SELECT COUNT(comm) 数量 FROM emp; ```
 -- 注意:由于COUNT() 函数给出的是comm字段这一列,所以只统计commlie非NULL的行数
 -- 查询emp表中月薪大于2500的人数
``` SELECT COUNT(*) AS 数量 FROM emp WHERE sal>2500;```
 -- 统计月薪与佣金之和大于2500的员工数量
``` SELECT COUNT(*) AS 数量 FROM emp WHERE sal+IFNULL(comm,0)>2500;```
 -- 查询有佣金的人数,以及有领导的人数
``` SELECT COUNT(comm) AS 有佣金的人数, COUNT(mgr) AS 有领导的人数 FROM emp;```
 
 -- 6.2 SUM()和AVG()
 -- 当需要纵向求和时使用SUM()函数
 -- 查询所有员工的月薪和
 ```SELECT SUM(sal) AS 月薪和 FROM emp;```
 -- 查询所有员工的月薪和,以及所有员工的佣金和
``` SELECT SUM(sal) AS 月薪和, SUM(comm) AS 佣金和 FROM emp;```
 -- 统计所有员工的平均工资
``` SELECT SUM(sal), COUNT(sal) FROM emp;```
 -- 或者使用下面语句
``` SELECT AVG(sal) FROM emp;```
 
 -- 6.3 MAX()和MIN()
 -- 查询最高工资和最低工资
``` SELECT MAX(sal), MIN(sal) FROM emp;```
 
 -- 7 分组查询 -----------------------------------
 -- 7.1 查询各部门员工的数量
 ```SELECT COUNT(*) FROM emp WHERE deptno IS NOT NULL GROUP BY deptno;```
 -- 此语句会将deptno进行分组,将此字段每种不同的值作为一组数据进行统计个数
 -- 查询各部门的员工数量,并显示部门编号
``` SELECT deptno, COUNT(*) FROM emp WHERE deptno IS NOT NULL GROUP BY deptno;```
 -- 查询每个部门的部门编号以及部门工资大于1500的人数
``` SELECT deptno, COUNT(*) FROM emp WHERE sal>1500 GROUP BY deptno;```
 
 -- 7.2 HAVING子句
 -- 查询工资总和大于9000的部门编号以及工资总和:
 ```SELECT deptno, SUM(sal) FROM emp GROUP BY deptno HAVING SUM(sal)>9000;```
 -- 注意:HAVING和WHERE的区别:
 -- 1.having是在分组后对数据进行过滤。
 --   where实在分组钱对数据进行过滤。
 -- 2.having后面可以使用聚合函数(统计函数)。
 --   where后面不可以使用聚合函数。
 -- where是在对分组钱记录的条件,如果是某行记录没有满足where子句的条件,那么这行记录不会参加分组;而having是对分组后的数据的约束
 
 -- 8 LIMIT -----------------------------------
 -- LIMIT用来限定查询结果的起始行,以及总行数
 -- 8.1 查询5行记录,起始行从0开始
 ```SELECT * FROM emp LIMIT 0,5;```
 -- 注意:起始行的索引是从0开始的,即为实际中第一行的数据
 -- 8.2 查询10行记录,起始行从3开始
``` SELECT * FROM emp LIMIT 3,10;```
 -- 8.3 分页查询
 -- 如果一页记录为10条,希望查看第3页记录应该怎么查呢?
 -- 1.第一页记录起始行为0,一共查询10行;
 -- 2.第二页记录起始行为10,一共查询10行;
 -- 3.第三页记录起始行为20, 一共查询10行;
 -- 8.3 分页查询
 -- 查询语句书写顺序
 -- select - from - where - group by - having - order by - limit
 -- 查询语句执行顺序
 -- from - where - group by - having - select - order by - limit
    原文作者:多网
    原文地址: https://www.jianshu.com/p/99c3703b9556
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞