美文网首页
Sql 语句

Sql 语句

作者: 字节码 | 来源:发表于2017-01-18 19:35 被阅读32次

    数据库概述:

    数据库(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

    相关文章

      网友评论

          本文标题:Sql 语句

          本文链接:https://www.haomeiwen.com/subject/plrbbttx.html