精华内容
下载资源
问答
  • MySQL高级SQL语句

    万次阅读 多人点赞 2021-06-28 15:06:13
    MySQL高级SQL语句MySQL高级SQL语句函数数学函数聚合函数字符串函数 MySQL高级SQL语句 use kgc; create table location (Region char(20),store_name char(20)); insert into location values ('East','Boston') ; ...

    MySQL高级SQL语句

    use kgc;
    create table location (Region char(20),store_name char(20));
    insert into location values ('East','Boston') ;
    insert into location values ('East','New York');
    insert into location values ('west','Los Angeles');
    insert into location values ('west','Houston') ;
    

    在这里插入图片描述

    create table Store_Info (Store_Name char(20),sales int(10),Date char(10));
    insert into Store_Info values ('Los Angeles','1500','2020-12-05');
    insert into Store_Info values ('Houston','250','2020-12-07');
    insert into Store_Info values ('Los Angeles','300','2020-12-08');
    insert into Store_Info values ('Boston','700','2020-12-08');
    

    在这里插入图片描述

    SELECT

    ---- SELECT ---- 显示表格中一个或数个栏位的所有资料
    语法: SELECT "栏位" FROM "表名";
    SELECT Store_Name FROM Store_Info;
    

    在这里插入图片描述

    DISTINCT

    ---- DISTINCT ---- 不显示重复的资料
    语法: SELECT DISTINCT "栏位" FROM "表名";
    SELECT DISTINCT Store_Name FROM Store_Info;
    

    在这里插入图片描述

    WHERE

    ---- WHERE ---- 有条件查询
    语法:SELECT "栏位” FROM "表名" WHERE "条件";
    SELECT Store_Name FROM Store_Info WHERE Sales > 1000;
    

    在这里插入图片描述

    AND OR

    ---- AND OR ---- 且 或
    语法:SELECT "栏位" FROM "表名” WHERE "条件1" {[ANDIOR] "条件2"}+;
    SELECT Store_Name FROM Store_Info WHERE Sales > 1000 OR (Sales < 500 AND Sales > 200);
    

    在这里插入图片描述

    IN

    ---- IN ---- 显示己知的值的资料
    语法: SELECT "栏位" FROM "表名" WHERE "栏位" IN ('值1','值2', ...);
    SELECT * FROM Store_Info WHERE Store_Name IN ('Los Angeles','Houston');
    

    在这里插入图片描述

    BETWEEN

    ---- BETWEEN ---- 显示两个值范围内的资料
    语法:SELECT "栏位" FROM "表名" WHERE "栏位" BETWEEN '值1' AND '值2';
    SELECT * FROM Store_Info WHERE Date BETWEEN '2020-12-06' AND '2020-12-10';
    

    在这里插入图片描述

    通配符

    ---- 通配符 ---- 通常通配符都是跟LIKE一起使用的
    % : 百分号表示零个、一个或多个字符
    _ : 下划线表示单个字符
    
    'A_Z':所有以‘A’起头,另一个任何值的字符,且以Z'为结尾的字符串。例如,'A.BZ’和‘A.22’都符合这一个模式,而‘AKK2'并不符合(因为在A和Z之间有两个字符,而不是一个字符)。
    'ABC%':所有以'ABC’起头的字符串。例如,'ABCD’和'ABCABC’都符合这个模式。
    '%XYZ':所有以'XYZ’结尾的字符串。例如,'WXYZ’和‘ZZXYZ’都符合这个模式。
    '%AN%':所有含有'AN'这个模式的字符串。例如,'LOS ANGELES’和'SAN FRANCISCO'都符合这个模式。
    '_AN%':所有第二个字母为‘A'和第三个字母为'N’的字符串。例如,'SAMN FRANCITSCO’符合这个模式,而'LOS ANGELES'则不符合这个模式。
    ---- LIKE ---- 匹配一个模式来找出我们要的资料
    语法:SELECT "栏位" FROM "表名" WHERE "栏位" LIKE {模式};
    SELECT * FROM Store_Info WHERE Store_Name like '%os%';
    ---- ORDER BY ---- 按关键字排序
    语法:SELECT "栏位" FROM "表名" [WHERE "条件"] ORDER BY "栏位" [ASC,DESC];
    #ASC是按照升序进行排序的,是默认的排序方式。
    #DESC是按降序方式进行排序。
    SELECT Store_Name,Sales,Date FROM Store_Info ORDER BY Sales DESC;
    

    在这里插入图片描述

    函数

    数学函数

    abs(x)                #返回x的绝对值
    rand()                #返回0到1的随机数
    mod(x,y)              #返回x除以y以后的余数
    power(x,y)            #返回x的y次方
    round(x)              #返回离x最近的整数
    round(x,y)            #保留x的y位小数四舍五入后的值
    sqrt(x)               #返回x的平方根
    truncate(x,y)         #返回数字x截断为y位小数的值
    ceil(×)               #返回大于或等于x的最小整数
    floor(x)              #返回小于或等于x的最大整数
    greatest(x1,x2...)    #返回集合中最大的值
    least(x1,x2...)       #返回集合中最小的值
    
    
    SELECT abs(-1),rand(),mod(5,3),power(2,3),round(1.89);
    SELECT round(1.8937,3),truncate(1.235,2),ceil(5.2),floor(2.1),least(1.89,3,6.1,2.1);
    

    在这里插入图片描述

    聚合函数

    聚合函数:
    avg()       #返回指定列的平均值
    count()     #返回指定列中非 NULL值的个数
    min()       #返回指定列的最小值
    max()       #返回指定列的最大值
    sum(x)      #返回指定列的所有值之和
    
    SELECT avg(Sales) FROM Store_Info;
    
    SELECT count(store_Name) FROM Store_Info;
    SELECT count(DISTINCT store_Name) FROM Store_Info;
    
    SELECT max(Sales) FROM Store_Info;
    SELECT min(sales) FROM Store_Info;
    
    SELECT sum(sales) FROM Store_Info;
    
    SELECT count(DISTINCT store_Name) FROM Store_Info;
    SELECT count(*) FROM Store_Info;
    #count(*)包括了所有的列的行数,在统计结果的时候,不会忽略列值为NULL
    #count(列名)只包括列名那一列的行数,在统计结果的时候,会忽略列值为NULL的行
    

    在这里插入图片描述

    字符串函数

    字符串函数:
    trim()             #返回去除指定格式的值
    concat(x,y)        #将提供的参数x和y拼接成一个字符串
    substr(x,y)        #获取从字符串x中的第y个位置开始的字符串,跟substring()函数作用相同
    substr(x,y,z)      #获取从字符串x中的第y个位置开始长度为z的字符串
    length(x)          #返回字符串x的长度
    replace(x,y,z)     #将字符串z替代字符串x中的字符串y
    upper(x)           #将字符串x的所有字母变成大写字母
    lower(x)           #将字符串x的所有字母变成小写字母
    left(x,y)          #返回字符串x的前y个字符
    right(x,y)         #返回字符串x的后y个字符
    repeat(x,y)        #将字符串x重复y次
    space(x)           #返回x个空格
    strcmp (x,y)       #比较x和y,返回的值可以为-1,0,1
    reverse(x)         #将字符串x反转
    
    SELECT concat(Region,Store_Name) FROM location WHERE Store_Name = 'Boston';
    
    #如sql_mode开启开启了PIPES_AS_CONCAT,"||"视为字符串的连接操作符而非或运算符,和字符串的拼接函数concat相类似,这和Oracle数据库使用方法一样的
    SELECT Region || ' ' || Store_Name FROM location WHERE Store_Name = 'Boston';
    
    SELECT substr(Store_Name,3) FROM location WHERE Store_Name = 'Los Angeles';
    SELECT substr(Store_Name,2,4) FROM location WHERE Store_Name = 'New York';
    
    SELECT TRIM ([ [位置] [要移除的字符串] FROM ] 字符串);
    #[位置]:的值可以为 LEADING(起头),TRAILING(结尾),BOTH(起头及结尾)。
    #[要移除的字符串]:从字串的起头、结尾,或起头及结尾移除的字符串。缺省时为空格
    
    SELECT TRIM(LEADING 'Ne' FROM 'New York');
    
    SELECT Region,length(Store_Name) FROM location;
    
    SELECT REPLACE(Region,'ast','astern')FROM location;
    

    在这里插入图片描述
    在这里插入图片描述

    ---- GROUP BY ----GROUP BY后面的栏位的查询结果进行汇总分组,通常是结合聚合函数一起使用的
    GROUP BY有一个原则,就是SELECT后面的所有列中,没有使用聚合函数的列,必须出现在GROUP BY后面。
    
    语法:SELECT "栏位1",SUM("栏位2") FROM "表名" GROUP BY "栏位1";
    SELECT Store_Name,SUM(Sales) FROM Store_Info GROUP BY Store_Name ORDER BY sales desc;
    
    ---- HAVING ---- 用来过滤由GROUP BY语句返回的记录集,通常与GROUP BY语句联合使用
    HAVING语句的存在弥补了wHERE关键字不能与聚合函数联合使用的不足。如果被SELECcT的只有函数栏,那就不需要GROUP BY子句。
    
    语法:SELECT "栏位1",SUM("栏位2") FROM "表格名" GROUP BY "栏位1" HAVING (函数条件);
    SELECT Store_Name,SUM(Sales) FROM Store_Info GROUP BY Store_Name HAVING SUM (Sales) > 1500;
    
    ---- 别名 ---- 栏位别名表格别名
    
    语法:SELECT "表格别名"."栏位1” [AS] "栏位别名" FROM "表格名" [AS] "表格别名"
    SELECT A.Store_Name Store,SUM(A.Sales) "Total Sales" FROM Store_Info A GROUP BY A.Store_Name;
    
    ---- 子查询 ---- 连接表格,在WHERE子句或 HAVING子句中插入另一个 SQL语句
    
    语法: SELECT "栏位1" FROM "表格1" WHERE "栏位2" [比较运算符]       #外查询
    (SELECT "栏位1" FROM "表格2" WHERE "条件");                       #内查询
    
    可以是符号的运算符,例如 =、>、<、>=、<= ;也可以是文字的运算符,例如LIKE、IN、BETWEEN
    SELECT SUM(Sales) FROM Store_Info WHERE Store_Name IN
    (SELECT Store_Name FROM location WHERE Region = 'west');
    
    SELECT SUM(A.Sales) FROM Store_Info A WHERE A.Store_Name IN
    (SELECT Store_Name FROM location B WHERE B.Store_Name = A.Store_Name);
    

    在这里插入图片描述

    EXISTS

    ---- EXISTS ---- 用来测试内查询有没有产生任何结果,类似布尔值是否为真
    #如果有的话,系统就会执行外查询中的SQL语句。若是没有的话,那整个SQL语句就不会产生任何结果。
    语法: SELECT "栏位1" FROM "表格1" WHERE EXISTS (SELECT * FROM "表格2" WHERE "条件");
    SELECT SUM(Sales) FROM Store_Info WHERE EXISTS (SELECT * FROM location WHERE Region = 'West');
    

    在这里插入图片描述

    • 连接查询
      • location 表格
        在这里插入图片描述
    UPDATE Store_Info SET store_name='washington’WHERE sales=300;
    
    • Store_Info表格
      在这里插入图片描述
    inner join(内连接):只返回两个表中联结字段相等的行
    left join(左连接):返回包括左表中的所有记录和右表中联结字段相等的记录
    right join(右连接):返回包括右表中的所有记录和左表中联结字段相等的记录
    
    SELECT * FROM location A INNER JOIN Store_Info B on A.Store_Name = B.store_Name ;
    
    SELECT * FROM location A RIGHT JOIN Store_Info B on A.Store_Name = B.Store_Name ;
    
    SELECT * FROM location A,store_Info B WHERE A.Store_Name = B.Store_Name;
    
    SELECT A.Region REGION,SUM(B.Sales) SALES FROM location A,Store_Info B
    WHERE A.Store_Name = B.Store_Name GROUP BY REGION;
    

    在这里插入图片描述

    CREATE VIEW

    ---- CREATE VIEW ---- 视图,可以被当作是虚拟表或存储查询。
    ·视图跟表格的不同是,表格中有实际储存资料,而视图是建立在表格之上的一个架构,它本身并不实际储存资料。
    ·临时表在用户退出或同数据库的连接断开后就自动消失了,而视图不会消失。
    ·视图不含有数据,只存储它的定义,它的用途一般可以简化复杂的查询。比如你要对几个表进行连接查询,而且还要进行统计排序等操作,写SQT语句会很麻烦的,用视图将几个表联结起来,然后对这个视图进行查询操作,就和对一个表查询一样,很方便。
    
    语法:CREATE VIEW "视图表名” AS "SELECT语句";
    CREATE VIEW V_REGION_SALES AS SELECT A.Region REGION, SUM(B.Sales) SALES FROM location A
    INNER JOIN Store_Info B ON A.Store_Name = B.Store_Name GROUP BY REGION;
    
    SELECT * FROM V_REGION_SALES;
    DROP VIEW V_REGION_SALES;
    

    在这里插入图片描述

    UNION

    ---- UNION ---- 联集,将两个SQL语句的结果合并起来,两个SQI语句所产生的栏位需要是同样的资料种类
    UNION:生成结果的资料值将没有重复,且按照字段的顺序进行排序
    语法:[SELECT 语句 1] UNION [SELECT 语句2];
    
    UNION ALL:将生成结果的资料值都列出来,无论有无重复
    语法:[SELECT 语句 1] UNION ALL [SELECT 语句 2];
    
    SELECT Store_Name FROM location UNION SELECT Store_Name FROM Store_Info;
    
    SELECT Store_Name FROM location UNION ALL SELECT Store_Name FROM Store_Info;
    

    在这里插入图片描述

    交集值

    ----- 交集值 ---- 取两个SQL语句结果的交集
    SELECT A.Store_Name FROM location A INNER JOIN Store_Info B ON A.Store_Name = B.Store_Name;
    SELECT A.Store_Name FROM location A INNER JOIN Store_Info B USING(Store_Name);
    
    #两表基中的一个表没有指定的行,而另一个表这个行有重复,并且确实有交集的时候用
    SELECT A.Store_Name FROM
    (SELECT Store_Name FROM location UNION ALL SELECT Store_Name FROM store_Info) A
    GROUP BY A.Store_Name HAVING COUNT(*) > 1;
    
    #取两个sQL语句结果的交集,且没有重复
    SELECT A.Store_Name FRONM (SELECT B.Store_Name FROM location B INNER JOIN Store_Info C ON B.Store_Name = C.store_Name) A
    GROUP BY A.Store_Name;
    
    SELECT DISTINCT A.Store_Name FROM location A INNER JOIN Store_Info B USING(Store_Name);
    
    SELECT DISTIMCT Store_Name FROM location WHERE (Store_Name) IN (SELECT Store_Name FROM Store_Info);
    
    SELECT DISTINCT A.Store_Name FROM location A LEFT JOIN Store_Info B USING(Store_Name) WHERE B.Store_Name IS NOT NULL;
    

    在这里插入图片描述

    无交集值

    ---- 无交集值 ---- 显示第一个sQL语句的结果,且与第二个SQL语句没有交集的结果,且没有重复
    SELECT DISTINCT Store_Name FROM location WHERE (Store_Name) NOT IN (SELECT Store_Name FROM Store_Info);
    
    SELECT DISTINCT A.Store_Name FROM location A LEFT JOIN Store_Info B USING(Store_Name) WHERE B.Store_Name IS NULL;
    

    在这里插入图片描述

    CASE

    ---- CASE ---- 是 SQL 用来做为 IF-THEN-ELSE 之类逻辑的关键字
    语法:
    SELECT CASE ("栏位名")
      WHEN "条件1” THEN "结果1"
      WHEN "条件2" THEN "结果2"
      ...
      [ELSE "结果N"]
      END
    FROM "表名";
    
    #"条件"可以是一个数值或是公式。ELSE子句则并不是必须的。
    
    SELECT store_Name, CASE Store_Name
      WHEN 'Los Angeles' THEN Sales * 2
      WHEN 'Boston' THEN Sales * 1.5
      ELSE Sales
      END
    "New Sales",Date
    FROM Store_Info;
    
    #"New Sales"是用于CASE 那个栏位的栏位名。
    
    CREATE TABLE Total_Sales (Name char(10),sales int(5));
    INSERT INTO Total_Sales VALUES ('zhangsan',10);
    INSERT INTO Total_Sales VALUES ('lisi',15);
    INSERT INTO Total_Sales VALUES ('wangwu',20);
    INSERT INTO Total_Sales VALUES ('zhaoliu',40);
    INSERT INTO Total_Sales VALUES ('sunqi',50);
    INSERT INTO Total_Sales VALUES ('zhouba',20);
    INSERT INTO Total_Sales VALUES ('wujiu',30);
    

    在这里插入图片描述
    在这里插入图片描述

    1、算排名

    ----算排名----表格自我连结(Self Join),然后将结果依序列出,算出每一行之前〈包含那一行本身)有多少行数
    SELECT A1.Name, A1.sales,COUNT(A2.sales) Rank FROM Total_sales A1,Total_sales A2
    WHERE A1.sales < A2.sales 0R (A1.sales = A2.sales AND A1.Name = A2.Name)
    GROUP BY A1.Name, A1.sales ORDER BY A1.sales DESC;
    
    例如:
    select A1.Name,A1.sales,count(A2.sales) rank from Total_Sales A1,Total_Sales A2 where A1.sales <  A2.sales OR (A1.sales=A2.sales and A1.Name=A2.Name) group by A1.Name order by A1.sales desc;
    
    解释:
    当A1的sales字段值小于A2的sales字段值、或者两表sales字段值相等并且Name字段值相等时,
    从A1和A2表中查询A1的Name字段值、A1的sales字段值、和A2的sales字段的非空值rank是别名,并为A1的Name字段分组,A1的sales字段降序排序
    

    在这里插入图片描述

    2、算中位数

    ---- 算中位数 ----
    SELECT Sales Middle FROM (SELECT A1.Name,A1.Sales,COUNT(A2.Sales) Rank FROM Total_Sales A1,Total_Sales A2
    WHERE A1.Sales < A2.Sales 0R (A1.Sales = A2.Sales AND A1.Name >= A2.Name)
    GROUP BY A1.Name,A1.Sales ORDER BY A1.Sales DESC) A3
    WHERE A3.Rank = (SELECT (COUNT(*)+1) DIV 2 FROM Total_Sales);
    
    例如:
    select * from (select A1.Name,A1.sales,count(A2.sales) rank from Total_Sales A1,Total_Sales A2 where A1.sales < A2.sales OR (A1.sales=A2.sales and A1.Name=A2.Name) group by A1.Name order by A1.sales desc) A3 where A3.rank = (select (count(*)+1) DIV 2 from Total_Sales);
    
    select sales mid from (select A1.Name,A1.sales,count(A2.sales) rank from Total_Sales A1,Total_Sales A2 where A1.sales < A2.sales OR (A1.sales=A2.sales and A1.Name=A2.Name) group by A1.Name order by A1.sales desc) A3 where A3.rank = (select (count(*)+1) DIV 2 from Total_Sales);
    
    
    #每个派生表必须有自己的别名,所以别名A3必须要有
    #DIV 是在MySQL中算出商的方式
    

    在这里插入图片描述

    3、算累积总计

    ---- 算累积总计 ---- 表格自我连结(Self Join),然后将结果依序列出,算出每一行之前(包含那一行本身)的总合
    SELECT A1.Name, A1.Sales, SUM(A2.Sales) Sum_Total FROM Total_Sales A1,Total_Sales A2
    WHERE A1.Sales < A2.Sales OR (A1.Sales=A2.Sales AND A1.Name = A2.Name)
    GROUP BY A1.Name,A1.Sales ORDER BY A1.Sales DESC;
    
    例如:
    select A1.*,sum(A2.sales) sum_soales from Total_Sales A1,Total_Sales A2 where A1.sales < A2.sales or(A1.sales=A2.sales and A1.Name=A2.Name) group by A1.Name order by A1.sales desc;
    

    在这里插入图片描述

    4、算总合百分比

    例如:
    select A1.*,A1.sales/(select sum(sales) from Total_Sales) z_sum from Total_Sales A1,Total_Sales A2 where A1.sales < A2.sales or (A1.sales=A2.sales and A1.Name=A2.Name) group by A1.Name;
    
    #select sum(sales) from Total_Sales 是为了算出字段值总合,然后每一行一一除以总合,算出每行的总合百分比。
    

    在这里插入图片描述

    5、算累计总合百分比

    例如:
    select A1.Name,A1.sales,sum(A2.sales),sum(A2.sales)/(select sum(sales) from Total_Sales) Z from Total_Sales A1,Total_Sales A2 where A1.sales < A2.sales or (A1.sales=A2.sales and A1.Name=A2.Name) group by A1.Name order by A1.sales desc;
    
    select A1.Name,A1.sales,sum(A2.sales),TRUNCATE(sum(A2.sales)/(select sum(sales) from Total_Sales),2) ||'%' Z from Total_Sales A1,Total_Sales A2 where A1.sales < A2.sales or (A1.sales=A2.sales and A1.Name=A2.Name) group by A1.Name order by A1.sales desc;
    

    在这里插入图片描述

    6、空值(null)和无值(’ ')的区别

    • 1、无值的长度为0,不占用空间;而空值null 的长度是null,是占用空间的
    • 2、IS NULL或者IS NOT NULL,是用来判断字段是不是NULL或者不是NULL,是不能查出是不是无值的
    • 3、无值的判断使用=’‘或者<>’'来处理。<>代表不等于
    • 4、在通过count()指定字段统计又多少行数时,如果遇到NULL值会自动忽略掉,遇到空值会自动加入记录中进行计算
    例如:
    create table SITE(site varchar(20));
    insert into SITE values('nanjing');
    insert into SITE values('beijing');
    insert into SITE values('');
    insert into SITE values('taijin');
    insert into SITE values();
    insert into SITE values('');
    select * from SITE;	
    

    在这里插入图片描述

    select length(site) from SITE;
    select * from SITE where site is NULL;
    select * from SITE where site is not NULL;
    select * from SITE where site ='';
    select * from SITE where site <> '';
    

    在这里插入图片描述

    7、正则表达式(与Shell部分一样)

    匹配模式			描述									实例
    ^ 				匹配文本的开始字符 						‘^bd’ 匹配以 bd 开头的字符串
    $ 				匹配文本的结束字符 						‘qn$’ 匹配以 qn 结尾的字符串
    . 				匹配任何单个字符							‘s.t’ 匹配任何 s 和 t 之间有一个字符的字符串
    * 				匹配零个或多个在它前面的字符 				‘fo*t’ 匹配 t 前面有任意个 o
    + 				匹配前面的字符 1 次或多次					‘hom+’ 匹配以 ho 开头,后面至少一个m 的字符串
    字符串 			匹配包含指定的字符串 						‘clo’ 匹配含有 clo 的字符串
    p1|p2 			匹配 p1 或 p2 							‘bg|fg’ 匹配 bg 或者 fg
    [...] 			匹配字符集合中的任意一个字符 				‘[abc]’ 匹配 a 或者 b 或者 c
    [^...] 			匹配不在括号中的任何字符 					‘[^ab]’ 匹配不包含 a 或者 b 的字符串
    {n} 			匹配前面的字符串 n 次 					‘g{2}’ 匹配含有 2 个 g 的字符串
    {n,m}			匹配前面的字符串至少 n 次,至多m 次		‘f{1,3}’ 匹配 f 最少 1 次,最多 3 次
    
    • 语法:SELECT 字段 FROM 表名 WHERE 字段 REGEXP 匹配模式
    例如:
    select * from Total_Sales where Name regexp '^[n]';
    select * from Total_Sales where Name regexp '[n]';
    select * from Total_Sales where Name regexp 'Ho|Bo';
    

    在这里插入图片描述

    8、存储过程(与Shell函数差不多,代码的复用)

    • 存储过程是一组为了完成特定功能的SQL语句集合
    • 存储过程在使用过程中是将常用或者复杂的工作预先使用SQL语句写好并用一个指定的名称来进行储存,这个过程经编译和优化后存储在数据库服务器中,当需要使用该存储过程时,只需要调用它即可,存储过程在执行上比传统SQL速度更快,执行效率更高。
    • 存储过程的优点
      • 1、执行一次后,会将生成的二进制代码驻留缓冲区,提高执行效率
      • 2、SQL语句加上控制语句的集合,灵活性高
      • 3、在服务器端存储,客户端调用时,降低网络负载
      • 4、可多次重复被调用,可随时修改,不影响客户端调用
      • 5、可完成所有的数据库操作,也可控制数据库的信息访问权限
    语法:
    DELIMITER !!    				#将语句的结束符号从分号;临时修改,以防出问题,可以自定义
    CREATE PROCEDURE XXX()  	#创建存储过程,过程名自定义,()可带参数
     	BEGIN   		    	#过程体以关键字BEGIN开始
     	select * from xxx;  	#过程体语句
     	END!!    				#过程体以关键字END结尾
    DELIMITER ; 			    	#将语句的结束符号恢复为分号
    
    call XXX;	  				#调用存储过程
    
    ====查看存储过程====
    show create procedure [数据库.]储存过程名; 	  #查看某个储存过程的具体信息
    show create procedure XXX;
    show procedure status [like '%XXX%'] \G
    
    例如:
    DELIMITER !!
    CREATE PROCEDURE KIND1()
    BEGIN
    	select * from Total_Sales;
    END!!
    
    DELIMITER ;
    CALL KIND1;
    
    show create procedure KIND1\G
    show procedure status like '%KIND1%'\G
    

    在这里插入图片描述

    • 存储过程的参数:
      • IN 输入参数,表示调用者向过程传入值(传入值可以是字面量或变量)
      • OUT 输出参数:表示过程向调用者传出值(可以返回多个值,传出值只能是变量)
    例如:
    DELIMITER !!
    CREATE PROCEDURE KIND2(IN people char(20))
    BEGIN
    	select * from Total_Sales where Name=people;                                                    
    END!!         
    
    DELIMITER ;
    CALL KIND2('lisi');
    

    在这里插入图片描述

    8.1、存储过程的条件语句

    例如:
    DELIMITER !!
    CREATE PROCEDURE KIND7(IN num int(10))
    BEGIN
    declare var int;
    set var=num*2;
    if var>=10 then
    	update Total_Sales set sales=sales+1;
    else 
    	update Total_Sales set sales=sales-1;
    end if;
    END!!
    DELIMITER ;
    
    CALL KIND7(5);
    CALL KIND7(4);
    

    在这里插入图片描述
    在这里插入图片描述

    8.2、循环语句while

    例如:
    create table akg(id int);
    
    DELIMITER !!
    CREATE PROCEDURE KIND6()
    BEGIN
    declare var int;
    set var=0;
    while var<5 do
    	insert into akg values(var);
    	set var=var+1;
    end while;
    END!!
    
    DELIMITER ;
    CALL KIND6;
    select * from akg;
    

    在这里插入图片描述

    展开全文
  • MySQL 高级SQL语句

    千次阅读 2021-10-27 14:16:32
    MySQL 数据库的查询,除了基本的查询外,有时候需要对查询的结果集进行处理。 例如只取 10 条数据、对查询结果进行排序或分组等等。 一、常用查询 1. 案例准备 #创建库和表,加入数据 create table


    引言

    对 MySQL 数据库的查询,除了基本的查询外,有时候需要对查询的结果集进行处理。 例如只取 10 条数据、对查询结果进行排序或分组等等。


    一、常用查询

    1. 案例准备

    #创建库和表,加入数据
    create table info (id int(10) primary key not null auto_increment,name varchar(20),score decimal(5,2),address varchar(40),hobby varchar(20));
    mysql> insert into info values(1,'guyi',99,'nanj',1);
    mysql> insert into info values(2,'lier',90,'beij',2);
    mysql> insert into info values(3,'lisan',88,'shanghai',4);
    mysql> insert into info values(4,'wangya',66,'hangzhou',5);
    mysql> insert into info values(5,'goudan',38,'suzhou',7);
    mysql> insert into info values(7,'lilei',11,'nanjing',5);
    mysql> insert into info values(6,'hanmeimei',10,'nanjing',3);
    mysql> insert into info values(8,'caicai',16,'nanjing',5);
    
    mysql> select * from info;
    +----+-----------+-------+----------+-------+
    | id | name      | score | address  | hobby |
    +----+-----------+-------+----------+-------+
    |  1 | guyi      | 99.00 | nanj     | 1     |
    |  2 | lier      | 90.00 | beij     | 2     |
    |  3 | lisan     | 88.00 | shanghai | 4     |
    |  4 | wangya    | 66.00 | hangzhou | 5     |
    |  5 | goudan    | 38.00 | suzhou   | 7     |
    |  6 | hanmeimei | 10.00 | nanjing  | 3     |
    |  7 | lilei     | 11.00 | nanjing  | 5     |
    |  8 | caicai    | 16.00 | nanjing  | 5     |
    +----+-----------+-------+----------+-------+
    8 rows in set (0.00 sec)
    

    2. 按关键字排序

    使用 SELECT 语句可以将需要的数据从 MySQL 数据库中查询出来,如果对查询的结果进行排序,可以使用 ORDER BY 语句来对语句实现排序,并最终将排序后的结果返回给用户。
    这个语句的排序不光可以针对某一个字段,也可以针对多个字段。

    2.1 语法

    SELECT column1, column2, ... FROM table_name ORDER BY column1, column2, ... 
    
    • ASC 是按照升序进行排序的,是默认的排序方式,即 ASC 可以省略。
    • SELECT 语句中如果没有指定具体的排序方式,则默认按 ASC方式进行排序。
    • DESC 是按降序方式进行排列。当然 ORDER BY 前面也可以使用 WHERE 子句对查询结果进一步过滤。

    2.2 单字段排序

    • 分数按照升序排列
    #按分数排序,默认不指定是升序排列 asc
    mysql> select id,name,score from info order by score;
    +----+-----------+-------+
    | id | name      | score |
    +----+-----------+-------+
    |  6 | hanmeimei | 10.00 |
    |  7 | lilei     | 11.00 |
    |  8 | caicai    | 16.00 |
    |  5 | goudan    | 38.00 |
    |  4 | wangya    | 66.00 |
    |  3 | lisan     | 88.00 |
    |  2 | lier      | 90.00 |
    |  1 | guyi      | 99.00 |
    +----+-----------+-------+
    
    • 分数按照降序排列
    #分数按降序排列,使用DESC
    mysql> select id,name,score from info order by score desc;
    +----+-----------+-------+
    | id | name      | score |
    +----+-----------+-------+
    |  1 | guyi      | 99.00 |
    |  2 | lier      | 90.00 |
    |  3 | lisan     | 88.00 |
    |  4 | wangya    | 66.00 |
    |  5 | goudan    | 38.00 |
    |  8 | caicai    | 16.00 |
    |  7 | lilei     | 11.00 |
    |  6 | hanmeimei | 10.00 |
    +----+-----------+-------+
    

    2.3 条件查询

    order by 还可以结合 where 进行条件过滤

    #筛选地址是南京的学生按分数降序排列
    mysql> select name,score from info where address ='nanjing' order by score desc;
    +-----------+-------+
    | name      | score |
    +-----------+-------+
    | caicai    | 16.00 |
    | lilei     | 11.00 |
    | hanmeimei | 10.00 |
    +-----------+-------+
    

    2.4 多字段排序

    • ORDER BY 语句也可以使用多个字段来进行排序,当排序的第一个字段相同的记录有多条的情况下,这些多条的记录再按照第二个字段进行排序,ORDER BY 后面跟多个字段时,字段之间使用英文逗号隔开,优先级是按先后顺序而定。
      但 order by 之后的第一个参数只有在出现相同值时,第二个字段才有意义。
    #hobbid进行降序排序,再在相同 hobby 中的 id 进行降序
    mysql> select id,name,hobby from info order by hobby desc,id asc;
    +----+-----------+-------+
    | id | name      | hobby |
    +----+-----------+-------+
    |  5 | goudan    | 7     |
    |  4 | wangya    | 5     |
    |  7 | lilei     | 5     |
    |  8 | caicai    | 5     |
    |  3 | lisan     | 4     |
    |  6 | hanmeimei | 3     |
    |  2 | lier      | 2     |
    |  1 | guyi      | 1     |
    +----+-----------+-------+
    
    #order by 之后的第一个参数只有在出现相同的数值,第二个字段才有意义
    mysql> select id,hobby from info order by id asc,hobby desc;
    +----+-------+
    | id | hobby |
    +----+-------+
    |  1 | 1     |
    |  2 | 2     |
    |  3 | 4     |
    |  4 | 5     |
    |  5 | 7     |
    |  6 | 3     |
    |  7 | 5     |
    |  8 | 5     |
    +----+-------+
    

    3. 区间判断及查询不重复记录

    3.1 and、all

    #查询info表内分数大于60且小于等于80分
    mysql> select * from info where score >60 and score <=80;
    +----+--------+-------+----------+-------+
    | id | name   | score | address  | hobby |
    +----+--------+-------+----------+-------+
    |  4 | wangya | 66.00 | hangzhou | 5     |
    +----+--------+-------+----------+-------+
    1 row in set (0.00 sec)
    
    ##查询info表内分数大于50或者小于等于80分
    mysql> select * from info where score >50 or score <=80;
    +----+-----------+-------+----------+-------+
    | id | name      | score | address  | hobby |
    +----+-----------+-------+----------+-------+
    |  1 | guyi      | 99.00 | nanj     | 1     |
    |  2 | lier      | 90.00 | beij     | 2     |
    |  3 | lisan     | 88.00 | shanghai | 4     |
    |  4 | wangya    | 66.00 | hangzhou | 5     |
    |  5 | goudan    | 38.00 | suzhou   | 7     |
    |  6 | hanmeimei | 10.00 | nanjing  | 3     |
    |  7 | lilei     | 11.00 | nanjing  | 5     |
    |  8 | caicai    | 16.00 | nanjing  | 5     |
    +----+-----------+-------+----------+-------+
    8 rows in set (0.00 sec)
    

    3.2 嵌套或多条件

    mysql> select * from info where score >70 or(score >75 and score <90);
    +----+-------+-------+----------+-------+
    | id | name  | score | address  | hobby |
    +----+-------+-------+----------+-------+
    |  1 | guyi  | 99.00 | nanj     | 1     |
    |  2 | lier  | 90.00 | beij     | 2     |
    |  3 | lisan | 88.00 | shanghai | 4     |
    +----+-------+-------+----------+-------+
    

    3.3 distinct 查询不重复记录

    #语法格式
    select distinct 字段 from 表名;
    
    mysql> select distinct hobby from info;
    +-------+
    | hobby |
    +-------+
    | 1     |
    | 2     |
    | 4     |
    | 5     |
    | 7     |
    | 3     |
    +-------+
    6 rows in set (0.00 sec)
    
    mysql> select name,hobby from info where hobby in (select distinct hobby from info);
    +-----------+-------+
    | name      | hobby |
    +-----------+-------+
    | guyi      | 1     |
    | lier      | 2     |
    | lisan     | 4     |
    | wangya    | 5     |
    | goudan    | 7     |
    | hanmeimei | 3     |
    | lilei     | 5     |
    | caicai    | 5     |
    +-----------+-------+
    #distinct必须放在最开头
    #distinct只能使用需要去重的字段进行操作,也就是说 sidtinct了name , hobby两个字段,后面想根据id进行排序,是不可以的,因为只能name,age两个字段进行操作
    #distinct去重多个字段时,含义是:几个字段同时重复时才会被过滤。
    
    • 多字段去重没有意义,所以更多用于单字段的去重
    mysql> select distinct address,hobby from info;
    +----------+-------+
    | address  | hobby |
    +----------+-------+
    | nanj     | 1     |
    | beij     | 2     |
    | shanghai | 4     |
    | hangzhou | 5     |
    | suzhou   | 7     |
    | nanjing  | 3     |
    | nanjing  | 5     |
    +----------+-------+
    

    4. 对结果进行分组

    • 通过 SQL 查询出来的结果,还可以对其进行分组,使用 GROUP BY 语句来实现
    • GROUP BY 通常都是结合聚合函数一起使用的
    • 常用的聚合函数包括:计数(COUNT)、 求和(SUM)、求平均数(AVG)、最大值(MAX)、最小值(MIN),GROUP BY 分组的时候可以按一个或多个字段对结果进行分组处理。
    #语法格式
    select column_name, aggregate_function(column_name)from table_name where column_name operator valueGROUP by column_name;
    
    #selet字段,聚合函数from表名,(where字段名(匹配)数值)group by字段名;
    
    示例
    #对info进行分组,筛选大于等于45的name,score相同的分为一个组
    mysql> select count(name),score from info where score >=45 group by score;
    +-------------+-------+
    | count(name) | score |
    +-------------+-------+
    |           1 | 66.00 |
    |           2 | 88.00 |
    |           1 | 90.00 |
    |           1 | 99.00 |
    +-------------+-------+
    4 rows in set (0.00 sec)
    
    • 分组排序
    #对info表中兴趣(hobby)相同的id进行数量统讦,并按照相同hobby进行分组
    mysql> select count(id),hobby from info group by hobby;
    +-----------+-------+
    | count(id) | hobby |
    +-----------+-------+
    |         1 | 1     |
    |         1 | 2     |
    |         1 | 3     |
    |         1 | 4     |
    |         3 | 5     |
    |         2 | 7     |
    +-----------+-------+
    6 rows in set (0.00 sec)
    
    #结合order by把统计的id数量进行按降序序排列
    mysql> select count(id),hobby from info group by hobby order by count(id) desc;
    
    • 分组条件
    #结合where语句,筛选分数大于等于80的分组,计算学生个数按降序排列
    mysql> select count(name),score from info where score >=80 group by score order by count(name) desc;
    +-------------+-------+
    | count(name) | score |
    +-------------+-------+
    |           2 | 88.00 |
    |           1 | 99.00 |
    |           1 | 90.00 |
    +-------------+-------+
    3 rows in set (0.00 sec)
    

    5. 限制结果条目

    limit 限制输出的结果记录
    在使用 MySQL SELECT 语句进行查询时,结果集返回的是所有匹配的记录(行)。有时候仅需要返回第一行或者前几行,这时候就需要用到 LIMIT 子句

    #语法格式
    SELECT column1, column2, ... FROM table_name LIMIT [offset,] number
    
    LIMIT 的第一个参数是位置偏移量(可选参数),是设置 MySQL 从哪一行开始显示。 
    如果不设定第一个参数,将会从表中的第一条记录开始显示。
    需要注意的是,第一条记录的 位置偏移量是 0,第二条是 1,以此类推。第二个参数是设置返回记录行的最大数目。
    
    #查询所有信息显示前4行记录
    mysql> select * from info limit 3;
    +----+-------+-------+----------+-------+
    | id | name  | score | address  | hobby |
    +----+-------+-------+----------+-------+
    |  1 | guyi  | 99.00 | nanj     | 1     |
    |  2 | lier  | 90.00 | beij     | 2     |
    |  3 | lisan | 88.00 | shanghai | 4     |
    +----+-------+-------+----------+-------+
    
    #从第4行开始,往后显示3行内容
    mysql> select * from info limit 3,3;
    +----+-----------+-------+----------+-------+
    | id | name      | score | address  | hobby |
    +----+-----------+-------+----------+-------+
    |  4 | wangya    | 66.00 | hangzhou | 5     |
    |  5 | goudan    | 38.00 | suzhou   | 7     |
    |  6 | hanmeimei | 10.00 | nanjing  | 3     |
    +----+-----------+-------+----------+-------+
    3 rows in set (0.00 sec)
    
    #结合order by语句,按id的大小升序排列显示前三行
    mysql> select id,name from info order by id limit 3;
    +----+-------+
    | id | name  |
    +----+-------+
    |  1 | guyi  |
    |  2 | lier  |
    |  3 | lisan |
    +----+-------+
    
    #结合order by语句,按id的大小降序排列显示最后三行
    mysql> select id,name from info order by id desc limit 3;
    +----+--------+
    | id | name   |
    +----+--------+
    |  9 | shabi  |
    |  8 | caicai |
    |  7 | lilei  |
    +----+--------+
    

    6. 设置别名

    在 MySQL 查询时,当表的名字比较长或者表内某些字段比较长时,为了方便书写或者 多次使用相同的表,可以给字段列或表设置别名,这样使用的时候直接使用别名,简洁明了,增强可读性。

    #语法格式
    对于列的别名:SELECT column_name AS alias_name FROM table_name;
    对于表的别名:SELECT column_name(s) FROM table_name AS alias_name;
    #s:代表多个列明
    
    • 在使用 AS 后,可以用 alias_name 代替 table_name,其中 AS 语句是可选的。AS 之后的别名,主要是为表内的列或者表提供临时的名称,在查询过程中使用,库内实际的表名或字段名是不会被改变的
    mysql> select name as 姓名,score as 成绩 from info;
    +-----------+--------+
    | 姓名      | 成绩   |
    +-----------+--------+
    | guyi      |  99.00 |
    | lier      |  90.00 |
    | lisan     |  88.00 |
    ......
    
    • 如果表的长度比较长,可以使用 AS 给表设置别名,在查询的过程中直接使用别名
    #临时设置info的别名为i
    mysql> select i.name as 姓名,score as 分数 from info as i;
    +-----------+--------+
    | 姓名      | 分数   |
    +-----------+--------+
    | guyi      |  99.00 |
    | lier      |  90.00 |
    | lisan     |  88.00 |
    ......
    
    • 查询info表的字段数量,以number显示
    mysql> select count(*) as number from info;
    +--------+
    | number |
    +--------+
    |      9 |
    +--------+
    1 row in set (0.00 sec)
    
    #不加as也一样显示
    mysql> select count(*) number from info;
    +--------+
    | number |
    +--------+
    |      9 |
    +--------+
    1 row in set (0.00 sec)
    

    使用场景:
    ① 对复杂的表进行查询的时候,别名可以缩短查询语句的长度
    ② 多表相连查询的时候(通俗易懂、减短sql语句)

    • AS 还可以作为连接语句的操作符
    #创建ks表,将info表的查询记录全部插入t1表
    mysql> create table ks as select * from info;
    
    mysql> select * from ks;
    +----+-----------+-------+----------+-------+
    | id | name      | score | address  | hobby |
    +----+-----------+-------+----------+-------+
    |  1 | guyi      | 99.00 | nanj     | 1     |
    |  2 | lier      | 90.00 | beij     | 2     |
    |  3 | lisan     | 88.00 | shanghai | 4     |
    |  4 | wangya    | 66.00 | hangzhou | 5     |
    |  5 | goudan    | 38.00 | suzhou   | 7     |
    |  6 | hanmeimei | 10.00 | nanjing  | 3     |
    |  7 | lilei     | 11.00 | nanjing  | 5     |
    |  8 | caicai    | 16.00 | nanjing  | 5     |
    |  9 | shabi     | 88.00 | hangzhou | 7     |
    +----+-----------+-------+----------+-------+
    9 rows in set (0.00 sec)
    

    在这里插入图片描述

    此处AS起到的作用:
    ① 创建了一个新表ks并定义表结构,插入表数据(与info表相同)
    ② 但是”约束“没有被完全”复制“过来;但是如果原表设置了主键,那么附表的default 字段会默认设置一个0
    相似之处:
    克隆、复制表结构
    create table ks (select * from info);
    也可以加入where 语句判断
    create table ks as select * from info where score >=50;
    在为表设置别名时,要保证别名不能与数据库中的其他表的名称冲突。
    列的别名是在结果中有显示的,而表的别名在结果中没有显示,只在执行查询时使用。

    7. 通配符

    • 通配符主要用于替换字符串中的部分字符,通过部分字符的匹配将相关结果查询出来。
    • 通常通配符都是跟 like 一起使用的,并协同 where 子句共同来完成查询任务。
    • 常用的通配符有两个:

    % 百分号表示零个、一个或多个字符
    _ 下划线表示单个字符

    #查询名字是c开头的记录
    mysql> select id,name from info where name like'c%';
    +----+--------+
    | id | name   |
    +----+--------+
    |  8 | caicai |
    +----+--------+
    1 row in set (0.00 sec)
    
    #查询名字里是c和i中间有一个字符的记录
    mysql> select id,name from info where name like 'c_ic_i';
    +----+--------+
    | id | name   |
    +----+--------+
    |  8 | caicai |
    +----+--------+
    1 row in set (0.00 sec)
    
    #查询名字中间有g的记录
    mysql> select id,name from info where name like '%g%';
    +----+--------+
    | id | name   |
    +----+--------+
    |  1 | guyi   |
    |  4 | wangya |
    |  5 | goudan |
    +----+--------+
    3 rows in set (0.00 sec)
    
    #查询hanmei后面3个字符的名字记录
    mysql> select id,name from info where name like 'hanmei___';
    +----+-----------+
    | id | name      |
    +----+-----------+
    |  6 | hanmeimei |
    +----+-----------+
    1 row in set (0.00 sec)
    
    #通配符“%”和“_”不仅可以单独使用,也可以组合使用
    例如查询名字以s开头的记录
    mysql> select id,name from info where name like 's%_';
    +----+-------+
    | id | name  |
    +----+-------+
    |  9 | shabi |
    +----+-------+
    1 row in set (0.00 sec)
    

    8. 子查询

    子查询也被称作内查询或者嵌套查询,是指在一个查询语句里面还嵌套着另一个查询语句。
    子查询语句是先于主查询语句被执行的,其结果作为外层的条件返回给主查询进行下一步的查询过滤。

    子语句可以与主语句所查询的表相同,也可以是不同表

    8.1 相同表查询

    mysql> select name,score from info where id in (select id from info where score >60);
    +--------+-------+
    | name   | score |
    +--------+-------+
    | guyi   | 99.00 |
    | lier   | 90.00 |
    | lisan  | 88.00 |
    | wangya | 66.00 |
    | shabi  | 88.00 |
    +--------+-------+
    
    in: 将主表和子表关联/连接的语法;从主语句的结果集中过滤条件
    主语句:select name,score from info where id
    子语句(集合): select id from info where score >60
    子语句中的sql语句是为了,最后过滤出一个结果集,用于主语句的判断条件
    

    8.2 不同表查询

    #创建表,插入数据
    mysql> create table gkd (id int);
    mysql> insert into gkd values(1),(2),(3),(4);
    mysql> select * from gkd;
    +------+
    | id   |
    +------+
    |    1 |
    |    2 |
    |    3 |
    |    4 |
    +------+
    

    在这里插入图片描述

    8.3 子查询的多层嵌套

    • 子查询不仅可以在 SELECT 语句中使用,在 INERT、UPDATE、DELETE 中也同样适用。
    • 在嵌套的时候,子查询内部还可以再次嵌套新的子查询,也就是说可以多层嵌套。
    • 子查询还可以用在 INSERT 语句中,子查询的结果集可以通过 INSERT 语句插入到其他的表中。
    #将ks里的记录全部删除,重新插入info表的记录
    mysql> delete from gl.ks where id <=9;
    mysql> select * from ks;
    Empty set (0.00 sec)
    mysql> insert into ks select * from info where id in (select id from info);
    Query OK, 9 rows affected (0.00 sec)
    Records: 9  Duplicates: 0  Warnings: 0
    

    在这里插入图片描述

    • 多层嵌套—子查询结合 UPDATE
      UPDATE 语句也可以使用子查询
      UPDATE 内的子查询,在 set 更新内容时,可以是单独的一列,也可以是多列
    mysql> update ks set score=50 where id in (select * from gkd where id=3);
    Query OK, 1 row affected (0.00 sec)
    Rows matched: 1  Changed: 1  Warnings: 0
    
    mysql> select * from ks;
    +----+-----------+-------+----------+-------+
    | id | name      | score | address  | hobby |
    +----+-----------+-------+----------+-------+
    |  1 | guyi      | 99.00 | nanj     | 1     |
    |  2 | lier      | 90.00 | beij     | 2     |
    |  3 | lisan     | 50.00 | shanghai | 4     |
    |  4 | wangya    | 66.00 | hangzhou | 5     |
    |  5 | goudan    | 38.00 | suzhou   | 7     |
    |  6 | hanmeimei | 10.00 | nanjing  | 3     |
    |  7 | lilei     | 11.00 | nanjing  | 5     |
    |  8 | caicai    | 16.00 | nanjing  | 5     |
    |  9 | shabi     | 88.00 | hangzhou | 7     |
    +----+-----------+-------+----------+-------+
    9 rows in set (0.00 sec)
    
    • 在 IN 前面还可以添加 NOT,其作用与 IN 相反,表示否定(即不在子查询的结果集里面)
    mysql> update ks set score=100 where id not in (select * from gkd where id >1);
    
    #select * form member where id >1  ##选择出id大于1
    #not in:不在范围内
    #表示 先匹配出gkd表内的id字段为基础匹配的结果集(2,3,4)
    然后再执行主语句,以主语句的id为基础 进行where 条件判断/过滤,
    

    在这里插入图片描述

    • 多层嵌套–子查询结合DELETE
    #删除大于80分
    mysql> delete from ks where id in (select id where score >80);
    

    在这里插入图片描述

    8.4 子查询—exists

    EXISTS 这个关键字在子查询时,主要用于判断子查询的结果集是否为空。
    如果不为空, 则返回 TRUE;反之,则返回 FALSE。

    在这里插入图片描述

    mysql> select count(*) from ks where exists(select id from ks where score=90);
    +----------+
    | count(*) |
    +----------+
    |       11 |									#存在分数等于90的记录,计算info的字段数为11
    +----------+
    1 row in set (0.00 sec)
    
    
    mysql> select count(*) from ks where exists(select id from ks where id=55);
    +----------+
    | count(*) |
    +----------+
    |        0 |									#没有等于55的,则返回错误0
    +----------+
    1 row in set (0.00 sec)
    

    8.5 子查询—别名as

    #查询 info 表 id,name 字段
    select id,name from info;
    
    • 将结果集做为一张“表”进行查询的时候,我们也需要用到别名
    比如我们输入下面的命令
    mysql> select id from (select id ,name from info);
    ERROR 1248 (42000): Every derived table must have its own alias
    
    #可以看到报错,因为 select * from 表名为标准格式,而以上的查询语句,"表名"的位置其实是一个结果集,
    mysql不能直接识别;
    而此时给结果集设置一个别名,以 "select a.id from a" 的方式查询将此结果集是为一张 "表",就可以正常查询数据了
    
    select a.id from (select id,name from info) a;
    相当于
    select info.id,name from info;
    
    mysql> select a.id from (select id,name from ks) a;
    +----+
    | id |
    +----+
    |  3 |
    |  4 |
    |  1 |
    |  2 |
    |  3 |
    |  4 |
    |  5 |
    |  6 |
    |  7 |
    |  8 |
    |  9 |
    +----+
    11 rows in set (0.00 sec)
    

    二、视图

    1. 简介

    • 视图是从一个或多个表中导出来的表,是一种虚拟存在的表。
    • 视图就像一个窗口,通过这个窗口可以看到系统专门提供的数据,这样,用户可以不用看到整个数据库中的数据,而只关心对自己有用的数据。
    • 数据库中只存放了视图的定义,而没有存放视图中的数据,这些数据存放在原来的表中。
    • 使用视图查询数据时,数据库系统会从原来的表中取出对应的数据。
    • 视图中的数据依赖于原来表中的数据,一旦表中数据发生改变,显示在视图中的数据也会发生改变。
    • 数据库中的虚拟表,这张虚拟表中不包含真实数据,只是做了映射。

    2. 视图的作用

    • 使操作简单化,可以对经常使用的查询定义一个视图,使用户不必为同样的查询操作指定条件

    • 增加数据的安全性,通过视图,用户只能查询和修改指定的数据。

    • 提高表的逻辑独立性,视图可以屏蔽原有表结构变化带来的影响。

    总结:使用视图的大部分情况是为了保障数据安全性,提高查询效率

    3. 视图和表的关系

    • 区别 :
      视图是已经编译好的 sql 语句,而表不是; 视图没有实际的物理记录,而表有;
      表只用物理空间而视图不占用物理空间,视图只是逻辑概念的存在,表可以及时对它进行修改, 但视图只能有创建的语句来修改;
      视图是查看数据表的一种方法,可以查询数据表中某些字段构成的数据,只是一些SQL语句的集合。从安全的角度说,视图可以不给用户接触数据表,从而不知道表结构。
      表属于全局模式中的表,是实表;视图属于局部模式的表,是虚表 视图的建立和删除只影响视图本身,不影响对应的基本表。
    • 联系:
      视图(view)是在基本表之上建立的表,它的结构(即所定义的列)和内容(即所有数据行)都来自表,它依据基本表存在而存在;
      一个视图可以对应一个基本表,也可以对应多个基本表。视图本表的抽象和在逻辑意义上建立的新关系。

    4. 示例

    • 创建视图
    mysql> create view v_score as select * from info where score >=80;
    mysql> show table status\G
    mysql> select * from v_score;
    +----+-------+-------+----------+-------+
    | id | name  | score | address  | hobby |
    +----+-------+-------+----------+-------+
    |  1 | guyi  | 99.00 | nanj     | 1     |
    |  2 | lier  | 90.00 | beij     | 2     |
    |  3 | lisan | 88.00 | shanghai | 4     |
    +----+-------+-------+----------+-------+
    3 rows in set (0.00 sec)
    

    在这里插入图片描述

    在这里插入图片描述

    三、NULL 值

    1. 概述

    • 在 SQL 语句使用过程中,经常会碰到 NULL 这几个字符。通常使用 NULL 来表示缺失的值,也就是在表中该字段是没有值的。
    • 如果在创建表时,限制某些字段不为空,则可以使用 NOT NULL 关键字,不使用则默认可以为空。
    • 在向表内插入记录或者更新记录时,如果该字段没有 NOT NULL 并且没有值,这时候新记录的该字段将被保存为 NULL。
    • 需要注意的是,NULL 值与数字 0 或者空白(spaces)的字段是不同的,值为NULL 的字段是没有值的。
    • 在SQL语句中,使用 IS NULL 可以判断表内的某个字段是不是 NULL 值,相反的用 IS NOT NULL可以判断不是NULL 值。

    2. null 值与空值的区别

    • 类似于空气与真空的区别
    • 空值长度为 0,不占空间,NULL 值的长度为 null,占用空间
    • is null无法判断空值
    • 空值使用 “=” 或者 “<>” 来处理(!=)
    • count()计算时,NULL会忽略,空值会加入计算
    #插入一条记录,显示出来就是null
    mysql> alter table info add column addr varchar(50);
    mysql> desc info;
    

    在这里插入图片描述

    #分数>50的更改地址为yunnan
    mysql> update info set addr='yunnan' where score >50;
    mysql> select * from info;
    

    在这里插入图片描述

    • 统计数量,检测 null 不会加入统计中
    mysql> select count(addr) from info;
    +-------------+
    | count(addr) |
    +-------------+
    |           5 |
    +-------------+
    1 row in set (0.00 sec)
    
    • info 表中其中 name 等于goudan修改为空值,统计数量,检测空值是不会被添加到统计中
    mysql> update info set addr='' where name='goudan';
    mysql> select count(addr) from info;
    

    在这里插入图片描述

    • 查询空值/非空值的判断方法
    mysql> select * from info where addr is null;
    mysql> select * from info where addr is not null;
    mysql> select count(*) from info where addr is not null;
    +----------+
    | count(*) |
    +----------+
    |        6 |
    +----------+
    1 row in set (0.00 sec)
    

    在这里插入图片描述

    总结

    • 视图为虚拟的表,他们包含的不是数据而是根据需要检索数据的查询
    展开全文
  • mysqlsql语句长度

    2021-01-18 21:20:42
    mysqlsql语句的长度是有限制的,刚刚了解这一点,赶紧记下来。查询方法>show VARIABLES like '%max_allowed_packet%';+--------------------------+------------+| Variable_name | Value |+------------------...

    mysql的sql语句的长度是有限制的,刚刚了解这一点,赶紧记下来。

    查询方法> show VARIABLES like '%max_allowed_packet%';

    +--------------------------+------------+

    | Variable_name            | Value      |

    +--------------------------+------------+

    | max_allowed_packet       | 1024       |

    | slave_max_allowed_packet | 1073741824 |

    +--------------------------+------------+

    这里的单位是byte,现在我的mysql的sql语句长度貌似是1k

    以下是网络上的经验,记录以下:

    修改方法

    1) 方法1

    可以编辑my.cnf来修改(windows下my.ini),在[mysqld]段或者mysql的server配置段进行修改。(在[mysqld]下加上max_allowed_packet=16M,保存重启mysql后)

    max_allowed_packet = 20M

    如果找不到my.cnf可以通过

    mysql --help | grep my.cnf

    去寻找my.cnf文件。

    2) 方法2

    (很妥协,很纠结的办法)

    进入mysql server

    在mysql 命令行中运行

    set global max_allowed_packet = 2*1024*1024*10

    然后关闭掉这此mysql server链接,再进入。

    show VARIABLES like '%max_allowed_packet%';

    查看下max_allowed_packet是否编辑成功 如果有网友提供更好的方法,我将感激不尽!

    展开全文
  • linux平台 监控mysql执行的sql语句 为了做好配合开发做性能和功能测试,方便监控正在执行的sql语句, 可以在/etc/mysqld中添加如下: log =/usr/local/mysql/var21005/mysql.log 就可以使用: tail -f mysql.log 来监控...

    linux平台 监控mysql执行的sql语句   为了做好配合开发做性能和功能测试,方便监控正在执行的sql语句, 可以在/etc/mysqld中添加如下:  log =/usr/local/mysql/var21005/mysql.log 就可以使用: tail -f mysql.log 来监控了  www.2cto.com     如果需要监控慢查询可以添加如下内容:  log-slow-queries = /usr/local/mysql/var21005/slowquery.log l…

    今天需要通过csv上传大量数据到数据库 直接逐行执行insert效率极其低下 后面通过拼接insert,稍微提高了些许效率,但依然不满足 最后发现,把这些插入放入同一个事务里面可以大大提高效率 beginTransaction insert..... insert..... insert..... insert..... commit…

    mysql怎么终止当前正在执行的sql语句 show processlist; kill 要杀的ID kill 7…

    今天上班例行的查看了下服务器的运行状况,发现服务器特卡,是mysqld这个进程占用CPU到了99%导致的. 比较好奇是那个程序在使用mysql导致cpu这么高的,通过show processlist命令查看了当前正在执行的sql语句,从而定位到了对应的程序,发现代码中有一个死循环在不停的查询导致cpu占用99%,原因找到了问题就好解决了. 这里简单的记录一下processlist的用法: processlist 命令的输出结果显示了有哪些线程在运行,可以帮助识别出有问题的查询语句,两种方式使用这…

    oracle 监控执行的sql语句 select * from v$sqlarea a where module='PL/SQL Developer' order by a.FIRST_LOAD_TIME desc select * from v$sqlarea a where module='PL/SQL Developer' order by a.FIRST_LOAD_TIME desc 监视oracle的执行sql情况: select q.sql_text from v$session s…

    有2个方法: 1.使用processlist,但是有个弊端,就是只能查看正在执行的sql语句,对应历史记录,查看不到.好处是不用设置,不会保存. -- use information_schema; -- show processlist; 或者: -- select * from information_schema.`PROCESSLIST` where info is not null; 2.开启日志模式 -- 1.设置 -- SET GLOBAL log_output = 'TABLE'…

    mysql查看正在执行的sql语句 2015年08月21日 17:32:59 阅读数:15398   有2个方法: 1.使用processlist,但是有个弊端,就是只能查看正在执行的sql语句,对应历史记录,查看不到.好处是不用设置,不会保存. -- use information_schema; -- show processlist; 或者: -- select * from information_schema.`PROCESSLIST` where info is not null;…

    原文:监控SQL Server正在执行的SQL语句和死锁情况 SELECT [Individual Query] = SUBSTRING(qt.TEXT, er.statement_start_offset / 2, ( CASE WHEN er.statement_end_offset = - 1 THEN LEN(CONVERT(NVARCHAR(MAX), qt.TEXT)) * 2 ELSE er.statement_end_offset END - er.statement_start…

    # tcpdump -n -nn -tttt -i eth1 -s 65535 'port 3306' -w tcpdump_mysql.ret -C 100 一个TCP包中包含多个mysql协议包,一个协议包就是一条mysql记录. 使用抓包工具开打tcpdump_mysql.ret 文件 使用tcpdump来抓取执行的sql语句. # tcpdump -i eth1 -s 0 -l -w - dst  port 3306 | strings $sudo tcpdump -i eth0 -A…

    修改密码 这是常见的大家一般都要用的 首先     安装成功了打开cmd --> mysql -u root -p -->输入你的密码     修改mysql root用户密码    格式:mysql> set password for 用户名@localhost = password('新密码');    举例:mysql> set password for root@localhost = password('root'); 上面例子将用户root的密码更改为root: 如果是…

    django框架采用的ORM模型,我们可以通过mysql的日志记录实时看到执行的sql语句,具体步骤如下: 第一步:找到mysql的配置文件 第二步:编辑mysql配置文件 第三步:重启mysql 第四步:查看日志开启的状态和log文件路径 第五步:实时查看执行的sql语句 是不是觉得很爽呢?如果你觉得本文章对你有所帮助,请持续关注我的博客. 本文章地址:http://www.cnblogs.com/robin201711/p/8470020.html…

    mysql统计类似SQL语句查询次数 vc-mysql-sniffer 工具抓取的sql分析. 1.先用shell脚本把所有enter符号替换为null,再根据语句前后的字符分隔语句 grep -Ev '# Time:|# User@Host' /tmp/tmp_vc_mysql.txt |sed 's/# Query_time.*/myxxxxx/g' |awk BEGIN{RS=EOF}'{gsub(/\\n/," ");print}'|awk BEGIN{RS=EOF}'{gsu…

    原文:Oracle,SQL Server 数据库较MySql数据库,Sql语句差异 Oracle,SQL Server 数据库较MySql数据库,Sql语句差异 1.关系型数据库 百度百科 关系数据库,是建立在关系模型基础上的数据库,借助于集合代数等数学概念和方法来处理数据库中的数据.现实世界中的各种实体以及实体之间的各种联系均用关系模型来表示.标准数据查询语言SQL就是一种基于关系数据库的语言,这种语言执行对关系数据库中数据的检索和操作. 关系模型由关系数据结构.关系操作集合.关系完整性约束三…

    浅谈MySQL中优化sql语句查询常用的30种方法 1.对查询进行优化,应尽量避免全表扫描,首先应考虑在 where 及 order by 涉及的列上建立索引. 2.应尽量避免在 where 子句中使用!=或<>操作符,否则将引擎放弃使用索引而进行全表扫描. 3.应尽量避免在 where 子句中对字段进行 null 值判断,否则将导致引擎放弃使用索引而进行全表扫描,如: select id from t where num is null 可以在num上设置默认值0,确保表中num列没有nul…

    最近做了个中等的项目,数据不会很多,开发时间比较紧迫,所以用了EF的框架. 在使用过程中,发现有时候执行的结果不如预期,想看看执行的sql语句为何,遍查找资料,在网上找到了相关辅助类,拿来使用,部署到生产环境. 代码如下: public class EFIntercepterLogging : DbCommandInterceptor { ILog log = LogManager.GetLogger("InfoAppender"); private readonly Stopwatc…

    第1章 数据库 1.1 数据库概述 l 什么是数据库 数据库就是存储数据的仓库,其本质是一个文件系统,数据按照特定的格式将数据存储起来,用户可以对数据库中的数据进行增加,修改,删除及查询操作. l 什么是数据库管理系统 数据库管理系统(DataBase Management System,DBMS):指一种操作和管理数据库的大型软件,用于建立.使用和维护数据库,对数据库进行统一管理和控制,以保证数据库的安全性和完整性.用户通过数据库管理系统访问数据库中表内的数据. l 常见的数据库管理系统 MY…

    数据库相关概念: 1. 数据库服务器:运行数据库管理软件的计算机 2. 数据库管理软件:MySQL.Oracle.db2.slqserver 3. 库:文件夹,用来组织文件/表 4. 表:文件(类似于excel),用来存放多行内容/多条记录 5. 记录:事物一系列典型的特征 6. 数据:描述事物特征的符号 MySQL数据库就是一个套接字软件,用来管理其他机器上的数据文件 MySQL介绍: MySQL是一个关系型数据库管理系统:就是一个基于socket编写的C/S架构的软件 客户端软件 mysql…

    最近这两天在使用控制台程序学习EFCore,突然想看看生成的SQL语句,所以在网上找到一位大神的分享的方法! 准备工作: 1). MySqlEFCore NuGet:   Pomelo.EntityFrameworkCore.MySql     (要2.0.0版本或与下面的NuGet包版本一致)   2). 查看sql语句的扩展包: Pomelo.EntityFrameworkCore.Extensions.ToSql -Version 2.0.0-rtm-10002  (建议使用install…

    import java.sql.Connection; import java.sql.DriverManager; import java.sql.SQLException; import java.sql.Statement; import org.junit.Test; /** * 使用Statement对象执行静态sql语句 * */ public class Demo1 { private String url = "jdbc:mysql://localhost:3306/day17&…

    1.使用Myeclipse逆向工程生成实体和配置信息: 步骤1:配置MyEclipse Database Explorer: 步骤2:为项目添加hibernate的依赖: 此处打开后,点击next进入下个页面: 此处选择,主键自增,然后点击Finish: 2.hql语句各种查询: Hibernate.cfg.xml: <?xml version='1.0' encoding='UTF-8'?>

    MySQL可以通过开通general_log参数(可动态修改)来扑捉所有在数据库执行的SQL语句.显示参数:mysql> show variables like 'general%log%';+------------------+---------------------------+| Variable_name    | Value                     |+------------------+---------------------------+| general_…

    mysql 常用的sql语句 1.查看数据库各个表中的记录数 USE information_schema; SELECT table_name,table_rows FROM tables WHERE TABLE_SCHEMA = 'testdb' ORDER BY table_rows DESC;…

    csdn博文地址:mysql使用基础 sql语句(一)  点击进入 命令行输入mysql -u root -p,回车再输入密码,进入mysql. 终端命令以分号作为一条语句的结束,可分为多行输入,只需在最后加上分号即可.如下图: 一.DDL:数据定义语言 Data Definition Language 作用:定义数据库或者表结构的. 操作的对象:数据库或表的结构的. 关键字:CREATE ALTER DROP ①查询数据库: 显示目前有几个库,输入: mysql>SHOW DATABASES;…

    --查询Oracle正在执行的sql语句及执行该语句的用户 SELECT b.sid oracleID, b.username 登录Oracle用户名, b.serial#, spid 操作系统ID, paddr, sql_text 正在执行的SQL, b.machine 计算机名 FROM v$process a, v$session b, v$sqlarea c WHERE a.addr = b.paddr AND b.sql_hash_value = c.hash_value --查看正在…

    前言 IBatis.Net中Sql语句是些在配置文件中的,而且配置文件是在程序启动时读取的(我们开发的时候需要将其设置成较新复制或者是始终复制),而不是程序将其包含在其中(例如NHibernate的映射文件则是设成了嵌入式资源).很多时候我想获取程序执行了那些sql,当程序显示错误时,我们想跟踪sql,或者是查看sql是否正确,难道要我们去查看程序在跟踪到映射的配置文件查看吗.可以通过两种方式实现: 一.通过配置文件配置 为程序的配置文件(App.config或者web.config)文件中添加…

    出错场景是升级oracle驱动,将版本从ojdbc14升级到ojdbc6,hibernate执行原生态sql语句会报如下错误:org.hibernate.MappingException: No Dialect mapping for JDBC type: -9org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:948)org.springframework.web.servl…

    包含用户名,所在数据库,执行的sql语句,执行开始时间,驱动程序,主机名称 SELECT     [Spid] = session_Id, ecid, [Database] = DB_NAME(sp.dbid), [User] = nt_username, [Status] = er.status, [Wait] = wait_type, [Individual Query] = SUBSTRING(qt.text, er.statement_start_offset / 2, (CASE WH…

    -- 1 查询正在执行的sql语句 select b.sid, b.username, b.serial#, a.spid, b.paddr, c.sql_text, b.machine from v$process a, v$session b, v$sqlarea c where a.addr = b.paddr and b.sql_hash_value = c.hash_value; -- 2 根据sid与serial# kill 需要中止的sql语句  select sql_text, …

    from django.db.models import Avg from app01 import models annotate:(聚合查询) ret=models.Article.objects.values('up_count').annotate(a=Avg('comment_count')).values('up_count','a') #原理讲解:之前这个是按照这个up_count来分组的,后面这个是求这个平均的值,后面是打印出什么值出来, a=Avg('comment_count…

    一.执行自定义SQL方法 1.Executing custom SQL directly      直接执行自定义SQL,这种方式可以完全避免数据模型,而是直接执行原始的SQL语句. 2.Manager.raw()      执行原始查询并返回模型实例   二.Executing custom SQL directly Manager.raw() 远远不够,可直接执行自定义SQL,directly execute UPDATE , INSERT , or DELETE queries.djang…

    展开全文
  • 背景信息 我有2个版本应该是...mysqlsql语句太长了?示例代码 在第一个示例中,我循环遍历所有对象并执行SQL语句。我从1574条记录开始,得到1574条结果。但是,当我尝试使用所有ID创建一个字符串,然后将其传递...
  • `mysqldump -u root -p --databases test mysql > D:\backup.sql` 3、备份所有数据库 mysqldump命令备份所有数据库的语法如下: `mysqldump -u username -p -all-databases > BackupName.sql` 示例:mysqldump -u -...
  • //这个是求pddate与系统时间的天数差selectbookId,bookName,booktypeId,pbName,author,context,smallImg,bigImg,price,pbdate,bookStates,ygcprice,numfrombookInfowherenum<10andDat...//这个是求pddate与系统...
  • 在查询语句前加上explain: 返回如图所示, 几个字段含义分别是: id // 选择标识符 select_type // 表示查询的类型 table // 输出结果集的表 partitions // 匹配的分区 type // 表示表的连接类型, ...
  • mysql 根据sql查询语句导出数据

    千次阅读 2021-01-25 18:40:55
    在这里提供2中方式:建议:可以使用方式二,就不使用方式...原理:通过mysql工具的-e参数,可以执行select、update、delete、insert语句。通过mysql -u用户名 –p密码 数据库 –esql语句 > 文件路径/文件名利用li...
  • mysql创建表的sql语句

    2021-01-18 19:47:27
    mysql创建表的sql语句mysql建表常用sql语句:连接:mysql -h主机地址 -u用户名 -p用户密码 (注:u与root可以不用加空格,其它也一样)断开:exit (回车)创建授权:grant select on 数据库.* to 用户名@登录主机 ...
  • mysql批量执行sql语句

    千次阅读 2021-03-04 02:54:49
    tablename Access 数据库:SELECT iif(len(field)>2,left(field,2)+'...',... Conn.Execute 说明 Execute 方法 该方法用于执行 SQL 语句......\\masql6.0\\bin>mysqldump -u root -proo t mysql>d:\\mysq...
  • MySQLSQL语句的执行过程
  • ps:一些几G的文件使用导入向导导入navica时,速度太慢,所以尝试使用sql语句直接查询导入,方法如下:一、查看mysql设置的权限show variables like '%secure%';查看 secure-file-priv 当前的值是什么如上图所示,我...
  • MySQL如何跟踪sql语句

    2021-01-19 18:25:57
    在项目开发中,难免会遇到在数据库服务器端跟踪sql执行语句的需求,通过跟踪sql执行语句,我们可以确定当上层应用在执行sql语句时在项目开发中,,难免会遇到在数据库服务器端跟踪sql执行语句的需求,通过跟踪sql...
  • 本文章来详细介绍关于mysql中导入数据与导出数据库sql语句,在mysql中常用的导入与导出数据的命令有source与mysqldump大家可参考。1、例1:连接到本机上的MYSQL首先在打开DOS窗口,然后进入mysql安装目录下的bin目录...
  • 假定我们的表结构如下:CREATE TABLE example (example_id INT NOT NULL,name VARCHAR( 50 ) NOT NULL,value VARCHAR( 50 ) NOT NULL,other_value VARCHAR( 50 ) NOT NULL)通常情况下单条插入的sql语句我们会这么写...
  • 修改主键的sql语句块如下: 22 declare @defname varchar(100) declare @cmd varchar(500) declare @tablename varchar(100) declare @keyname varchar(100) Set @tablename='Temp1' Set @keyname='id' --需要設置的...
  • 实用的 MySQL sql 语句

    2021-02-07 21:34:59
    这儿只讲究实用, 程序员编程时常用到的 MySQLsql语句(不包括基本的 select, update, delete 等语句).1. 添加一个用户build,并赋予所有权限的命令grant all privileges on *.* to build@'%' identified by 'build...
  • 修改mysql登录密码与sql语句介绍

    千次阅读 2021-02-01 10:43:39
    忘记密码有两种方式可以解决,一是通过sql语句修改登录密码: 二是通过修改mysql 安装目录下的my.ini配置文件,在配置文件中找到[mysqld],然后在下面写上一句:sikp-grant-tables。然后重启数据库服务器,这时候就...
  • 查看mysql版本:select version();方法一: show profiles。1.Show profiles是5.0.37之后添加的,要想使用此功能,要确保版本在5.0.37之后。...可以开始执行一些想要分析的sql语句了,执行完后,...
  • classMysql{//拼接sql语句publicfunctionautoExecute($data='',$table,$mode="insert",$where="where1limit1"){//insert和update语句需要传入数组判断if(is_array($data)){//Update语句的拼接if($mode=="up...
  • mysql创建表的sql语句mysql建表常用sql语句:连接:mysql -h主机地址 -u用户名 -p用户密码 (注:u与root可以不用加空格,其它也一样)断开:exit (回车)创建授权:grant select on 数据库.* to 用户名@登录主机 ...
  • mysql_query()函数PHP MySQL 函数库中,mysql_query() 函数用于向 MySQL 发送并执行 SQL 语句。对于没有数据返回结果集的 SQL ,如 UPDATE、DELETE 等在执行成功时返回 TRUE,出错时返回 FALSE;对于 SELECT,SHOW,...
  • 扩展资料: 注意事项 存储过程(stored procedure)是一组为了完成特定功能的SQL语句集合,经编译后存储在服务器端的数据库中,利用存储过程可以加速SQL语句的执行。 存储过程分为系统存储过程和自定义存储过程。 ...
  • mysql 的 max_allowed_packet 的大致意思就是允许执行的SQL语句的最大大小值。max_allowed_packet的协议限制为1GB, 该值应为1024的倍数,非向下舍入到最接近的倍数。show VARIABLES like '%max_allowed_packet%';...
  • mysql数据库重命名sql语句

    千次阅读 2021-02-02 12:05:33
    整理了一些mysql数据库重命名语句语句中的数据库表前缀换成自己的即可。代码:CREATE DATABASE `ct` DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;RENAME TABLE `51cola`.`commentmeta`TO `ct`.`...
  • 数据库MySQL——SQL语句(命令)

    千次阅读 2021-01-20 00:01:49
    SQL语句分类DCL (Data Control Language):数据控制语言;用来管理用户及权限DDL(Data Definition Language):数据定义语言;用来定义数据库对象:库,表,列等DML(Data Manipulation Language):数据操作语言;用来...
  • mysql批量删除sql语句

    千次阅读 2021-02-02 09:55:42
    30种mysql优化sql语句查询的方法_计算机软件及应用_IT/计算机_专业资...简要介绍基础语句: 1、说明:创建数据库 CREATE DATABASE database-name 2、说明:删除数据库 drop database dbname 3、说明:备份 sql server --...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 769,062
精华内容 307,624
关键字:

mysql高级sql语句

mysql 订阅