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
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 206,214评论 6 481
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 88,307评论 2 382
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 152,543评论 0 341
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 55,221评论 1 279
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 64,224评论 5 371
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,007评论 1 284
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,313评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,956评论 0 259
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 43,441评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,925评论 2 323
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,018评论 1 333
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,685评论 4 322
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,234评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,240评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,464评论 1 261
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,467评论 2 352
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,762评论 2 345

推荐阅读更多精彩内容