Mysql语句

MySQL


所谓安装Mysql数据库,就是在主机安装一个数据库管理系统(DBMS),这个管理程序可以管理多个数据库。

DBMS(database manage system)

一个数据库中可以创建多个表,以保存数据(信息)。


SQL 语句类型

DDL:数据定义语句[create表,库…]
DML:数据操作语句[增加insert,修改update,删除 delete]
DQL:数据查询语句[select ]
DCL:数据控制语句[管理数据库: 比如用户权限 grant revoke ]



数据库

创建

#使用指令创建数据库
CREATE DATABASE db01;#删除数据库指令
DROP DATABASE db01#创建一个使用utf8字符集的hsp_db02数据库
CREATE DATABASE db02 CHARACTER SET utf8#创建一个使用utf8字符集,并带校对规则的hsp_db03数据库
CREATE DATABASE db03 CHARACTER SET utf8 COLLATE utf8_bin
#校对规则 utf8_bin 区分大小 默认utf8_general_ci 不区分大小写



查看、删除

#查看当前数据库服务器中的所有数据库
SHOW DATABASES#查看前面创建的db01数据库的定义信息
SHOW CREATE DATABASE `db01`
#在创建数据库,表的时候,为了规避关键字,可以使用反引号解决,比如有数据库的名称就叫做CREATE,那么就需要使用` `解决。#删除前面创建的db01数据库
DROP DATABASE db01



备份

恢复数据库

#备份, 要在Dos下执行mysqldump指令其实在mysql安装目录\bin
#这个备份的文件,就是对应的sql语句
mysqldump -u root -p -B db02 db03 > d:\\bak.sqlDROP DATABASE ecshop;#恢复数据库(注意:进入Mysql命令行再执行)
source d:\\bak.sql
#第二个恢复方法, 直接将bak.sql的内容放到查询编辑器中,执行,相当于重新执行了一遍

备份数据库的表

mysqldump -u 用户名 -p密码 数据库 表12 表n > d:\\文件名.sql




创建

CREATE TABLE table_name
(field1 datatype,field2 datatype,field3 datatype
)character set 字符集 collate 校对规则 engine 存储引擎
  • field:指定列名
  • datatype:指定列类型(字段类型)
  • character set:如不指定则为所在数据库字符集
  • collate:如不指定则为所在数据库校对规则
  • engine:引擎
#指令创建表
#注意:db02创建表时,要根据需保存的数据创建相应的列,并根据数据的类型定义相应的列类型。例:user表 (快速入门案例 create_tab01.sql)
#id        	整形               [图形化,指令]                
#name 		字符串
#password 	字符串
#birthday 	日期
CREATE TABLE `user` (id INT, `name` VARCHAR(255),`password` VARCHAR(255), `birthday` DATE)CHARACTER SET utf8 COLLATE utf8_bin ENGINE INNODB;

修改表

NOT NULL DEFAULT '' 不允许为空NULL,默认是一个空的’ '字符。

--  员工表emp的上增加一个image列,varchar类型(要求在resume后面)。
ALTER TABLE emp ADD image VARCHAR(32) NOT NULL DEFAULT '' AFTER RESUMEDESC employee -- 显示表结构,可以查看表的所有列--  修改job列,使其长度为60。
ALTER TABLE empMODIFY job VARCHAR(60) NOT NULL DEFAULT ''--  删除sex列。
ALTER TABLE empDROP sex--  表名改为employee。
RENAME TABLE emp TO employee--  修改表的字符集为utf8 
ALTER TABLE employee CHARACTER SET utf8--  列名name修改为us	er_name
ALTER TABLE employee CHANGE `name` `user_name` VARCHAR(64) NOT NULL DEFAULT ''DESC employee

Mysql 数据类型


MySQL 支持所有标准 SQL 数值数据类型。

这些类型包括严格数值数据类型(INTEGERSMALLINTDECIMALNUMERIC),以及近似数值数据类型(FLOATREAL DOUBLE PRECISION)。

关键字INTINTEGER的同义词,关键字DECDECIMAL的同义词。

BIT数据类型保存位字段值,并且支持 MyISAMMEMORYInnoDBBDB表。

作为 SQL 标准的扩展,MySQL也支持整数类型 TINYINTMEDIUMINTBIGINT

类型大小范围(有符号)范围(无符号)用途
TINYINT1 Bytes(-128,127)(0,255)小整数值
SMALLINT2 Bytes(-32 768,32 767)(0,65 535)大整数值
MEDIUMINT3 Bytes(-8 388 608,8 388 607)(0,16 777 215)大整数值
INT或INTEGER4 Bytes(-2 147 483 648,2 147 483 647)(0,4 294 967 295)大整数值
BIGINT8 Bytes(-9,223,372,036,854,775,808,9 223 372 036 854 775 807)(0,18 446 744 073 709 551 615)极大整数值
FLOAT4 Bytes(-3.402 823 466 E+38,-1.175 494 351 E-38),0,(1.175 494 351 E-38,3.402 823 466 351 E+38)0,(1.175 494 351 E-38,3.402 823 466 E+38)单精度浮点数值
DOUBLE8 Bytes(-1.797 693 134 862 315 7 E+308,-2.225 073 858 507 201 4 E-308),0,(2.225 073 858 507 201 4 E-308,1.797 693 134 862 315 7 E+308)0,(2.225 073 858 507 201 4 E-308,1.797 693 134 862 315 7 E+308)双精度浮点数值
DECIMAL对DECIMAL(M,D) ,如果M>D,为M+2否则为D+2依赖于M和D的值依赖于M和D的值小数值

日期和时间类型

表示时间值的日期和时间类型为DATETIMEDATETIMESTAMPTIMEYEAR

每个时间类型有一个有效值范围和一个"零"值,当指定不合法的MySQL不能表示的值时使用"零"值。

TIMESTAMP类型有专有的自动更新特性。

类型大小( bytes)范围格式用途
DATE31000-01-01/9999-12-31YYYY-MM-DD日期值
TIME3‘-838:59:59’/‘838:59:59’HH:MM:SS时间值或持续时间
YEAR11901/2155YYYY年份值
DATETIME8‘1000-01-01 00:00:00’ 到 ‘9999-12-31 23:59:59’YYYY-MM-DD hh:mm:ss混合日期和时间值
TIMESTAMP4‘1970-01-01 00:00:01’ UTC 到 ‘2038-01-19 03:14:07’ UTC结束时间是第 2147483647 秒,北京时间 2038-1-19 11:14:07,格林尼治时间 2038年1月19日 凌晨 03:14:07YYYY-MM-DD hh:mm:ss混合日期和时间值,时间戳

字符串类型
字符串类型指CHARVARCHARBINARYVARBINARYBLOBTEXTENUMSET

类型大小用途
CHAR0-255 bytes定长字符串
VARCHAR0-65535 bytes变长字符串
TINYBLOB0-255 bytes不超过 255 个字符的二进制字符串
TINYTEXT0-255 bytes短文本字符串
BLOB0-65 535 bytes二进制形式的长文本数据
TEXT0-65 535 bytes长文本数据
MEDIUMBLOB0-16 777 215 bytes二进制形式的中等长度文本数据
MEDIUMTEXT0-16 777 215 bytes中等长度文本数据
LONGBLOB0-4 294 967 295 bytes二进制形式的极大文本数据
LONGTEXT0-4 294 967 295 bytes极大文本数据

数值型

整数

#使用tinyint 来演示范围 有符号 -128 ~ 127  如果没有符号 0-255
#1. 如果没有指定 unsinged , 则TINYINT就是有符号
#2. 如果指定 unsinged , 则TINYINT就是无符号 0-255
CREATE TABLE t3 (id TINYINT);
CREATE TABLE t4 (id TINYINT UNSIGNED);INSERT INTO t3 VALUES(127); #这是非常简单的添加语句
SELECT * FROM t3INSERT INTO t4 VALUES(255);
SELECT * FROM t4;

整数无符号

create table t10 (id tinyint );//默认是有符号的
create table t11 (id tinyint unsigned);//无符号的 (后加unsigned就行)

bit

mysql > create table t05 (num bit(8));
mysql > insert into t05 (1, 3);
mysql > insert into t05 values(2, 65);

bit字段显示时,按照位的方式显示,查询的时候仍然可以用使用添加的数值

如果一个值只有0,1可以考虑使用bit(1), 可以节约空间

位类型。M指定位数,默认值1,范围1-64

#1. bit(m) m 在 1-64
#2. 添加数据 范围 按照你给的位数来确定,比如 m = 8 表示一个字节 0~255
#3. 显示按照bit 
#4. 查询时,仍然可以按照数来查询
CREATE TABLE t05 (num BIT(8));
INSERT INTO t05 VALUES(255); # 按位显示 255 就是全1 (b'11111111')
SELECT * FROM t05;
SELECT * FROM t05 WHERE num = 1;

小数

FLOAT/DOUBLE [UNSIGNED]

Float单精度精度,Double双精度

DECIMAL[M,D] [UNSIGNED]

可以支持更加精确的小数位。M是小数位数(精度)的总数,D是小数点(标度)后面的位数。

如果D是0,则值没有小数点或分数部分。M最大65,D最大是30。

如果D被省略,默认是0。如果M被省略,默认是10。

#创建表
CREATE TABLE t06 (num1 FLOAT,num2 DOUBLE,num3 DECIMAL(30,20));
#添加数据
INSERT INTO t06 VALUES(88.12345678912345, 88.12345678912345,88.12345678912345);#decimal可以存放很大的数
CREATE TABLE t07 (num DECIMAL(65));
INSERT INTO t07 VALUES(8999999933338388388383838838383009338388383838383838383);CREATE TABLE t08(num BIGINT UNSIGNED)
INSERT INTO t08 VALUES(8999999933338388388383838838383009338388383838383838383);

字符串

CHAR(size)

固定长度字符串最大255字符

VARCHAR(size)0~65535

可变长度字符串最大65532字节

utf8编码最大21844字符((65535-3) / 3)其中1-3个字节用于记录大小

#注释的快捷键 shift+ctrl+c , 注销注释 shift+ctrl+r
-- CHAR(size)
-- 固定长度字符串 最大255 字符 
-- VARCHAR(size)    0~65535字节
-- 可变长度字符串 最大65532字节  【utf8编码最大21844字符 1-3个字节用于记录大小】
-- 如果表的编码是 utf8 varchar(size) size = (65535-3) / 3 = 21844
-- 如果表的编码是 gbk varchar(size) size = (65535-3) / 2 = 32766
CREATE TABLE t09 (`name` CHAR(255));CREATE TABLE t10 (`name` VARCHAR(32766)) CHARSET gbk;DROP TABLE t10;

注意

char(4) //这个4表示字符数(最大255),不是字节数,不管是中文还是字母都是放四个,按字符计算

varchar(4) //这个4表示字符数,不管是字母还是中文都以定义好的表的编码来存放数据

不管是中文还是英文字母,都是最多存放4个,是按照字符来存放的

char(4)是定长(固定的大小),就是说,即使插入'aa',也会占用分配的4个字符的空间

varchar(4)是变长(变化的大小),就是说如果插入了'aa',实际占用空间大小并不是4个字符,而是按照实际占用空间来分配(说明:varchar本身还需要占用1-3个字节来记录存放内容长度)

#演示字符串类型的使用细节
#char(4) 和 varchar(4) 这个4表示的是字符,而不是字节, 不区分字符是汉字还是字母
CREATE TABLE t11(`name` CHAR(4));
INSERT INTO t11 VALUES('你好你好');SELECT * FROM t11;CREATE TABLE t12(`name` VARCHAR(4));
INSERT INTO t12 VALUES('你好你好');
INSERT INTO t12 VALUES('ab北京');
SELECT * FROM t12;#如果varchar 不够用,可以考试使用mediumtext 或者longtext, 
#如果想简单点,可以使用直接使用text
CREATE TABLE t13( content TEXT, content2 MEDIUMTEXT , content3 LONGTEXT);
INSERT INTO t13 VALUES('你好你教育', '你好你教育100', '你好你教育1000~~');
SELECT * FROM t13;

日期

CREATE TABLE birthday6( t1 DATE, t2 DATETIME,
t3 TIMESTAMP NOT NULL DEFAULTCURRENT TIMESTAMP ON UPDATE
CURRENT TIMESTAMP ); # timestamp时间戳
# NOT NULL DEFAULTCURRENT TIMESTAMP ON UPDATE CURRENT TIMESTAMP 意思是没有默认值的话会根据当前时间自动更新
mysql> INSERT INTO birthday (t1,t2)
VALUES('2022-11-11',2022-11-11 10:10:10');

注意

TimeStampInsertupdate时,自动更新。

#创建一张表, date , datetime , timestamp
CREATE TABLE t14 (birthday DATE , -- 生日job_time DATETIME, -- 记录年月日 时分秒login_time TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP); -- 登录时间, 如果希望login_time列自动更新, 需要配置SELECT * FROM t14;
INSERT INTO t14(birthday, job_time) VALUES('2022-11-11','2022-11-11 10:10:10');
-- 如果我们更新 t14 表的某条记录,login_time列会自动的以当前时间进行更新





CURD


Insert语句 (添加数据)

Update语句 (更新数据)

Delete语句 (删除数据)

Select语句 (查找数据)


Insert

-- 创建一张商品表goods (id  int , goods_name varchar(10), price double );
-- 添加2条记录
CREATE TABLE `goods` (id INT ,goods_name VARCHAR(10), -- 长度10price DOUBLE NOT NULL DEFAULT 100 );-- 添加数据
INSERT INTO `goods` (id, goods_name, price) VALUES(10, '华为手机', 2000);INSERT INTO `goods` (id, goods_name, price) VALUES(20, '苹果手机', 3000);

注意

-- 1.插入的数据应与字段的数据类型相同。
--       比如 把 'abc' 添加到 int 类型会错误
INSERT INTO `goods` (id, goods_name, price) VALUES('abc', '小米手机', 2000);-- 2. 数据的长度应在列的规定范围内,例如:不能将一个长度为80的字符串加入到长度为40的列中。
INSERT INTO `goods` (id, goods_name, price) VALUES(40, 'vovo手机vovo手机vovo手机vovo手机vovo手机', 3000);-- 3. 在values中列出的数据位置必须与被加入的列的排列位置相对应。
INSERT INTO `goods` (id, goods_name, price)  -- 不对VALUES('vovo手机',40, 2000);-- 4. 字符和日期型数据应包含在单引号中。
INSERT INTO `goods` (id, goods_name, price) VALUES(40, vovo手机, 3000); -- 错误的 vovo手机 应该 'vovo手机'-- 5. 列可以插入空值[前提是该字段允许为空(如果指定 not null 则不可以)],insert into table value(null)
INSERT INTO `goods` (id, goods_name, price) VALUES(40, 'vovo手机', NULL);-- 6. insert into tab_name (列名..)  values (),(),()  形式添加多条记录
INSERT INTO `goods` (id, goods_name, price) VALUES(50, '三星手机', 2300),(60, '海尔手机', 1800);-- 7. 如果是给表中的所有字段添加数据,可以不写前面的字段名称
INSERT INTO `goods`   VALUES(70, 'IBM手机', 5000);-- 8. 默认值的使用,当不给某个字段值时,如果有默认值就会添加默认值,否则报错-- 如果某个列 没有指定 not null ,那么当添加数据时,没有给定值,则会默认给null-- 如果我们希望指定某个列的默认值,可以在创建表时指定
INSERT INTO `goods` (id, goods_name)   VALUES(80, '格力手机');SELECT * FROM goods;

update

-- 1. 将所有员工薪水修改为5000元。[如果没有带where 条件,会修改所有的记录,因此要小心]
UPDATE employee SET salary = 5000 -- 2. 将姓名为 小妖怪 的员工薪水修改为3000元。
UPDATE employee SET salary = 3000 WHERE user_name = '小妖怪' -- 3. 将 老妖怪 的薪水在原有基础上增加1000元
INSERT INTO employee VALUES(200, '老妖怪', '1990-11-11', '2000-11-11 10:10:10', '捶背的', 5000, '给大王捶背', 'd:\\a.jpg');UPDATE employee SET salary = salary + 1000 WHERE user_name = '老妖怪' -- 可以修改多个列的值
UPDATE employee SET salary = salary + 1000 , job = '出主意的'WHERE user_name = '老妖怪' 
SELECT * FROM employee;

注意

WHERE子句指定应更新哪些行。如没有WHERE子句,则更新所有的行(记录)

如果需要修改多个字段,可以通过 set 字段1=值1,字段2=值2...


delete

删除只能按照行删除,不能按照列删除。

--  删除表中名称为’老妖怪’的记录。
DELETE FROM employee WHERE user_name = '老妖怪';--  删除表中所有记录, 老师提醒,一定要小心
DELETE FROM employee;-- Delete语句不能删除某一列的值(可使用update 设为 null 或者 '')
UPDATE employee SET job = '' WHERE user_name = '老妖怪';-- 要删除这个表
DROP TABLE employee;

注意

如果不使用where子句,将删除表中所有数据。

Delete语句不能删除某一列的值(可使用update设为null 或者"")

使用delete语句删除记录,不删除表本身。如要删除表,使用droptable语句。drop table 表名;


select

Select 指定查询哪些列的数据。

column 指定列名。

* 号代表查询所有列。

From 指定查询哪张表。

DISTINCT 可选, 指显示结果时,是否去掉重复数据。

CREATE TABLE student(id INT NOT NULL DEFAULT 1,NAME VARCHAR(20) NOT NULL DEFAULT '',chinese FLOAT NOT NULL DEFAULT 0.0,english FLOAT NOT NULL DEFAULT 0.0,math FLOAT NOT NULL DEFAULT 0.0
);INSERT INTO student(id,NAME,chinese,english,math) VALUES(2,'张飞',67,98,56);
INSERT INTO student(id,NAME,chinese,english,math) VALUES(3,'宋江',87,78,77);
INSERT INTO student(id,NAME,chinese,english,math) VALUES(4,'关羽',88,98,90);
INSERT INTO student(id,NAME,chinese,english,math) VALUES(5,'赵云',82,84,67);
INSERT INTO student(id,NAME,chinese,english,math) VALUES(6,'欧阳锋',55,85,45);
INSERT INTO student(id,NAME,chinese,english,math) VALUES(7,'黄蓉',75,65,30);
INSERT INTO student(id,NAME,chinese,english,math) VALUES(8,'韩信',45,65,99);SELECT * FROM student;-- 查询表中所有学生的信息。
SELECT * FROM student;
-- 查询表中所有学生的姓名和对应的英语成绩。
SELECT `name`,english FROM student;
-- 过滤表中重复数据 distinct 。
SELECT DISTINCT english FROM student;
-- 要查询的记录,每个字段都相同,才会去重
SELECT DISTINCT `name`, english FROM student;

列运算和as别名

-- 统计每个学生的总分
SELECT `name`, (chinese+english+math) FROM student;
-- 在所有学生总分加10分的情况
SELECT `name`, (chinese + english + math + 10) FROM student;
-- 使用别名表示学生分数。
SELECT `name` AS '名字', (chinese + english + math + 10) AS total_score FROM student;

where 子句运算符

运算符使用场景符号
比较运算符大小比较>、>=、=、<、<=、<>、!>、!<
范围运算符表达式值是否在指定的范围(闭区间)BETWEEN…AND…、NOT BETWEEN…AND…
列表运算符判断表达式是否为列表中的指定项IN (项1,项2……) 、NOT IN (项1,项2……)
模式匹配符判断值是否与指定的字符通配格式相符LIKE、NOT LIKE
空值判断符判断表达式是否为空IS NULL、NOT IS NULL
逻辑运算符用于多条件的逻辑连接NOT、AND、OR

where 子句过滤查询

_:匹配任意一个字符

%:匹配0个或多个字符

[ ]:匹配[ ]中的任意一个字符(若要比较的字符是连续的,则可以用连字符“-”表 达 )

[^ ]:不匹配[ ]中的任意一个字符

-- 查询姓名为赵云的学生成绩
SELECT * FROM student WHERE `name` = '赵云'-- 查询英语成绩大于90分的同学
SELECT * FROM student WHERE english > 90-- 查询总分大于200分的所有同学
SELECT * FROM student WHERE (chinese + english + math) > 200-- 查询math大于60 并且(and) id大于4的学生成绩
SELECT * FROM studentWHERE math >60 AND id > 4-- 查询英语成绩大于语文成绩的同学
SELECT * FROM studentWHERE english > chinese-- 查询总分大于200分 并且 数学成绩小于语文成绩,的姓赵的学生.
-- 赵% 表示 名字以赵开头的就可以
SELECT * FROM studentWHERE (chinese + english + math) > 200 AND math < chinese AND `name` LIKE '赵%'-- 查询英语分数在 80-90之间的同学。
SELECT * FROM studentWHERE english >= 80 AND english <= 90;
SELECT * FROM studentWHERE english BETWEEN 80 AND 90; -- between .. and .. 是 闭区间-- 查询数学分数为89,90,91的同学。
SELECT * FROM student WHERE math = 89 OR math = 90 OR math = 91;
SELECT * FROM student WHERE math IN (89, 90, 91);

order by 子句排序

Order by 指定排序的列,排序的列既可以是表中的列名,也可以是select语句后指定的列名

Asc升序[默认]、Desc降序

ORDER BY子句应位于SELECT语句的结尾

-- 对数学成绩排序后输出【升序】。
SELECT * FROM student ORDER BY math;-- 对总分按从高到低的顺序输出 [降序] -- 使用别名排序
SELECT `name` , (chinese + english + math) AS total_score FROM student ORDER BY total_score DESC;-- 对姓韩的学生成绩[总分]排序输出(升序) where + order by
SELECT `name`, (chinese + english + math) AS total_score FROM studentWHERE `name` LIKE '韩%'ORDER BY total_score;





加强Select

通过子句强化使用select查找数据

-- ■ 使用where子句
-- 	?如何查找1992.1.1后入职的员工
-- 在mysql中,日期类型可以直接比较, 需要注意格式
SELECT * FROM empWHERE hiredate > '1992-01-01'-- ■ 如何使用like操作符(模糊)
-- 	%: 表示0到多个任意字符 _: 表示单个任意字符
-- 	?如何显示首字符为S的员工姓名和工资
SELECT ename, sal FROM empWHERE ename LIKE 'S%'
-- 	?如何显示第三个字符为大写O的所有员工的姓名和工资
SELECT ename, sal FROM empWHERE ename LIKE '__O%'-- ■ 如何显示没有上级的雇员的情况
SELECT * FROM empWHERE mgr IS NULL;-- ■ 查询表结构 
DESC emp -- 使用order by子句
--   ?如何按照工资的从低到高的顺序[升序],显示雇员的信息
SELECT * FROM empORDER BY sal 
--   ?按照部门号升序而雇员的工资降序排列 , 显示雇员信息SELECT * FROM empORDER BY deptno ASC , sal DESC;

分页查询

select.... limit start, rows

表示从start+1行开始取,取出rows行, start 从0开始计算

-- 分页查询
-- 按雇员的id号升序取出, 每页显示3条记录,请分别显示 第1页,第2页,第3页-- 第1页
SELECT * FROM emp ORDER BY empno LIMIT 0, 3;
-- 第2页
SELECT * FROM emp ORDER BY empno LIMIT 3, 3;
-- 第3页
SELECT * FROM emp ORDER BY empno LIMIT 6, 3;
-- 推导一个公式 
SELECT * FROM empORDER BY empno LIMIT 每页显示记录数 * (第几页-1) , 每页显示记录数-- 测试
SELECT job, COUNT(*) FROM emp GROUP BY job;
-- 显示雇员总数,以及获得补助的雇员数
SELECT COUNT(*) FROM emp  WHERE mgr IS NOT NULL;
SELECT MAX(sal) - MIN(sal) FROM emp;

分组函数和子句

-- 增强group by 的使用-- (1) 显示每种岗位的雇员总数、平均工资。
SELECT COUNT(*), AVG(sal), job FROM emp GROUP BY job; -- (2) 显示雇员总数,以及获得补助的雇员数。
--  思路: 获得补助的雇员数 就是 comm 列为非null, 就是count(列),如果该列的值为null, 是不会统计 
SELECT COUNT(*), COUNT(comm)FROM emp --  统计没有获得补助的雇员数
SELECT COUNT(*), COUNT(IF(comm IS NULL, 1, NULL))FROM emp SELECT COUNT(*), COUNT(*) - COUNT(comm)FROM emp -- (3) 显示管理者的总人数。小技巧:尝试写->修改->尝试[正确的]
SELECT COUNT(DISTINCT mgr) FROM emp; -- (4) 显示雇员工资的最大差额。
-- 思路: max(sal) - min(sal)
SELECT MAX(sal) - MIN(sal) FROM emp;

注意:

如果select语句同时包含有group by、having、limit、order by

那么他们的顺序是group by , having , orderby, limit

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/47717.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

docker 安装nginx 和 elasticsearch ik 自定义分词

1、切换到/mydata 文件夹 创建 nginx 目录 mkdir nginx 2、运行 docker run --name nginx -p 80:80 -d nginx:1.22.0 3、复制docker 里面的nginx配置到 外面的nginx/conf 下面 docker cp nginx:/etc/nginx /mydata/nginx 4、把 /mydata/nginx下面的nginx 改…

html动态爱心代码【一】(附源码)

前言 七夕马上就要到了&#xff0c;为了帮助大家高效表白&#xff0c;下面再给大家带来了实用的HTML浪漫表白代码(附源码)背景音乐&#xff0c;可用于520&#xff0c;情人节&#xff0c;生日&#xff0c;表白等场景&#xff0c;可直接使用。 效果演示 文案修改 var loverNam…

Redis系列(四):哨兵机制详解

首发博客地址 https://blog.zysicyj.top/ 前面我们说过&#xff0c;redis采用了读写分离的方式实现高可靠。后面我们说了&#xff0c;为了防止主节点压力过大&#xff0c;优化成了主-从-从模式 思考一个问题&#xff0c;主节点此时挂了怎么办 这里主从模式下涉及到的几个问题&a…

快速排序 | C++|时间空间复杂度

1.概念 快速排序(QuickSort)的基本思想是:通过一趟排序将待排记录分割成独立的两部分&#xff0c;其中一部分记录的关键字均比另一部分记录的关键字小&#xff0c;则可分别对这两部分记录继续进行排序&#xff0c;以达到整个序列有序的目的。 2.算法思想描述 1.进行一次划分&…

03.有监督算法——决策树

1.决策树算法 决策树算法可以做分类&#xff0c;也可以做回归 决策树的训练与测试&#xff1a; 训练阶段&#xff1a;从给定的训练集构造出一棵树&#xff08;从根节点开始选择特征&#xff0c;如何进行特征切分&#xff09; 测试阶段&#xff1a;根据构造出来的树模型从上…

机器人项目:从 ROS2 切换到 ROS1 的原因

一、说明 机器人操作系统ROS是使用最广泛的机器人中间件平台。它在机器人社区中使用了10多年&#xff0c;无论是在业余爱好者领域还是在工业领域。ROS可用于各种微控制器和计算机&#xff0c;从Arduino到Raspberry Pi再到Linux工作站&#xff0c;它为电机控制器&#xff0c;视觉…

顺序栈Sequential-stack

0、节点结构体定义 typedef struct SqStack{int *base;int *top; } SqStack; 1、初始化 bool InitStack(SqStack &S) {S.base new int[Maxsize]; //eg. #define Maxsize 100if(!S.base){return false;}S.top S.base;return true; } 2、入栈 bool Push(SqStack &…

深入理解JMM和并发三大特性

并发和并行 并发和并行的目的都是为了使CPU的使用率最大化&#xff0c;这两个概念也是我们容易混淆的。 并行&#xff08;Parallel&#xff09; 并行是指在同一时刻&#xff0c;有多条指令在多个处理器上同时执行&#xff0c;因为并行要求程序能同时执行多个操作&#xff0c…

python连接PostgreSQL 数据库

执行如下命令安装 pip3 install psycopg2 python代码 Author: tkhywang 2810248865qq.com Date: 2023-08-21 11:42:17 LastEditors: tkhywang 2810248865qq.com LastEditTime: 2023-08-21 11:51:56 FilePath: \PythonProject02\PostgreSQL 数据库.py Description: 这是默认设置…

C#系统锁屏事件例子 - 开源研究系列文章

今天有个网友问了个关于操作系统锁屏的问题。 我们知道&#xff0c;操作系统是基于消息和事件处理的&#xff0c;所以我们只要找到该操作系统锁屏和解屏的那个事件&#xff0c;然后在事件里进行处理即可。下面是例子介绍。 1、 项目目录&#xff1b; 下面是项目目录&#xff1a…

jQuery Editable Select可搜索下拉选项框

前言 可搜索的下拉选项框 源码地址:https://github.com/indrimuska/jquery-editable-select 可搜索的下拉选项框 引入依赖 <script src"//code.jquery.com/jquery-1.12.4.min.js"></script> <script src"//rawgithub.com/indrimuska/jquery…

漏洞指北-VulFocus靶场专栏-初级02

漏洞指北-VulFocus靶场02-初级 初级005 &#x1f338;phpunit 远程代码执行 (CVE-2017-9841)&#x1f338;step1&#xff1a;进入漏洞页step2&#xff1a; burpsuite 抓包,等待请求页&#xff0c;获得flag 初级006 &#x1f338;splunk 信息泄露 &#xff08;CVE-2018-11409&am…

传统DNS、负载均衡服务发现框架与专业服务发现框架(Eurek、nacos)分析

1、DNS 服务器 DNS 服务器可以在一定程度上用作服务发现的机制&#xff0c;以下是其冲动服务发现的一些利弊 优势 广泛性&#xff1a; DNS是互联网的标准协议之一&#xff0c;已经广泛地被支持和使用。因此&#xff0c;使用DNS作为服务发现的机制可以借助现有的网络基础设施…

工业类LMQ61460AASRJRR,汽车类LMQ61460AFSQRJRRQ1、LMQ61460AASQRJRRQ1 6A、降压转换器简化原理图

一、LMQ61460AASRJRR器件概述&#xff1a; LMQ61460 是一款具有集成旁路电容器的高性能直流/直流同步降压转换器。该器件具有集成式高侧和低侧MOSFET&#xff0c;能够在 3.0V 至 36V 的宽输入电压范围内提供高达 6A 的输出电流&#xff1b;可耐受 42V 电压&#xff0c;简化了输…

85-最大矩阵

题目 给定一个仅包含 0 和 1 、大小为 rows x cols 的二维二进制矩阵&#xff0c;找出只包含 1 的最大矩形&#xff0c;并返回其面积。 示例 1&#xff1a; 输入&#xff1a;matrix [[“1”,“0”,“1”,“0”,“0”],[“1”,“0”,“1”,“1”,“1”],[“1”,“1”,“1”,…

SpringCloudGateway网关实战(一)

SpringCloudGateway网关实战&#xff08;一&#xff09; 目前对cloud的gateway功能还是不太熟悉&#xff0c;因此特意新建了对应的应用来尝试网关功能。 网关模块搭建 首先我们新建一个父模块用于添加对应的springboot依赖和cloud依赖。本模块我们的配置读取使用的是nacos&a…

ubuntu开机失败——ACPI Error

开机循环进入GNU GRUB 或者 黑屏 1.acpioff 解决办法 1&#xff09;先用下面方法进入系统 2&#xff09;更改grub ref 开机循环进入GNU GRUB 或者 黑屏 有提示ACPI Error错误如图&#xff1a; 解决办法 1&#xff09;先用下面方法进入系统 在GUN GRUB界面&#xff0c;选择ubun…

juc概述和Lock接口

目录 一、什么是JUC 1、JUC概述 2、进程与线程 3、线程的状态 4、wait/sleep 的区别 5、并发与并行 6、管程 7、用户线程和守护线程 二、Lock接口 1、Synchronized 使用synchronized实现售票案例 使用synchronized实现增减变量操作 2、什么是 Lock 买票例子使用lo…

[ MySQL ] — 复合查询和内外连接的使用

目录 复合查询 多表查询 自连接 子查询 单行子查询 多行子查询 多列子查询 在from子句中使用子查询 合并查询 union union all 表的内连接和外连接 内连接 外连接 左外连接 右外连接 复合查询 多表查询 实际开发中往往数据来自不同的表&#xff0c;所以需要多表查…

解决运行在微信小程序中报[ app.json 文件内容错误] app.json: app.json 未找到(env: Windows,mp,1.05.2204

找到project.config.json文件夹 添加 "miniprogramRoot": "unpackage/dist/dev/mp-weixin/", 即可