首页 > 数据库 >sql部分语法

sql部分语法

时间:2023-04-21 10:36:51浏览次数:54  
标签:JOIN 数据库 when 语法 stu mysqldump sql table 部分

原文地址 zhuanlan.zhihu.com

sql部分语法

残枫cps残枫cps

​目录收起mysqldumpIF表达式IFNULL(expr1,expr2)IF ELSE 做为流程控制语句使用INNER JOINLEFT JOINRIGHT JOINFULL OUTER JOINcase when then

mysqldump

mysqldump用来备份数据库或在不同数据库之间迁移数据,mydqldump的备份内容包括用来创建表和装载表的SQL语句

MySQLdump是MySQL自带的导出数据工具,通常我们用它来导出MySQL中,但是有时候我们需要导出MySQL数据库中某个表的部分数据,这时该怎么办呢?
mysqldump命令中带有一个 --where/-w 参数,它用来设定数据导出的条件,使用方式和SQL查询命令中中的where基本上相同,有了它,我们就可以从数据库中导出你需要的那部分数据了。

命令格式如下:
mysqldump -u用户名 -p密码 数据库名 表名 --where="筛选条件" > 导出文件路径

例子:
从meteo数据库的sdata表中导出sensorid=11 且 fieldid=0的数据到 /home/xyx/Temp.sql 这个文件中
mysqldump -uroot -p123456 meteo sdata --where=" sensorid=11 and fieldid=0" > /home/xyx/Temp.sql
mysqldump -uroot -p123456 meteo sdata --where=" sensorid=11" > /home/xyx/Temp.sql
mysqldump -uroot -p123456 meteo sdata --where=" sensorid in (1,2,3) " > /home/xyx/Temp.sql

另外你还可以直接导出 文本文件*.txt
mysqldump -uroot -p123456 meteo sdata --where=" sensorid=11 and fieldid=0" > /home/xyx/Temp.txt

备份数据库

mysqldump 数据库名 >数据库备份名

mysqldump -A -u用户名 -p密码 数据库名>数据库备份名

mysqldump -d -A --add-drop-table -uroot -p >xxx.sql

1.导出结构不导出数据
mysqldump -d 数据库名 -uroot -p > xxx.sql

2.导出数据不导出结构
mysqldump -t 数据库名 -uroot -p > xxx.sql

3.导出数据和表结构
mysqldump 数据库名 -uroot -p > xxx.sql

4.导出特定表的结构
mysqldump -uroot -p -B数据库名 --table 表名 > xxx.sql

mysqldump [OPTIONS] database [tables]

详情看:http://blog.csdn.net/xin_yu_xin/article/details/7574662

导入数据:
由于mysqldump导出的是完整的SQL语句,所以用mysql客户程序很容易就能把数据导入了:

mysql 数据库名 < 文件名

or:

show databases;

然后选择被导入的数据库:

use ***;

source /tmp/xxx.sql

IF表达式

IF(expr1,expr2,expr3)
如果 expr1 是TRUE (expr1 <> 0 and expr1 <> NULL),则 IF()的返回值为expr2; 否则返回值则为 expr3。IF() 的返回值为数字值或字符串值,具体情况视其所在语境而定。
SELECT IF(sva=1,"男","女") AS s FROM table_name WHERE sva != '';

IFNULL(expr1,expr2)

假如expr1 不为 NULL,则 IFNULL() 的返回值为 expr1; 否则其返回值为 expr2。IFNULL()的返回值是数字或是字符串,具体情况取决于其所使用的语境。

SELECT IFNULL(1,0);
-> 1SELECT IFNULL(NULL,10);
-> 10SELECT IFNULL(1/0,10);-> 10SELECT IFNULL(1/0,'yes');-> 'yes'

IFNULL(expr1,expr2) 的默认结果值为两个表达式中更加“通用”的一个,顺序为STRING、 REAL或 INTEGER。

IF ELSE 做为流程控制语句使用

IF实现条件判断,满足不同条件执行不同的操作,这个我们只要学编程的都知道IF的作用了,下面我们来看看mysql 存储过程中的IF是如何使用的吧。
IF search_condition
THEN statement_list [ELSEIF search_condition THEN]
statement_list ... [ELSE statement_list] END IF
与PHP中的IF语句类似,当IF中条件search_condition成立时,执行THEN后的statement_list语句,否则判断ELSEIF中的条件,成立则执行其后的statement_list语句,否则继续判断其他分支。当所有分支的条件均不成立时,执行ELSE分支。search_condition是一个条件表达式,可以由“=、<、<=、>、>=、!=”等条件运算符组成,并且可以使用AND、OR、NOT对多个表达式进行组合。
例如,建立一个存储过程,该存储过程通过学生学号(student_no)和课程编号(course_no)查询其成绩(grade),返回成绩和成绩的等级,成绩大于90分的为A级,小于90分大于等于80分的为B级,小于80分大于等于70分的为C级,依次到E级。那么,创建存储过程的代码如下:

CREATE PROCEDURE dbname.proc_getGrade
(stu_no varchar(20),cour_no varchar(10)) BEGIN DECLARE stu_grade float; SELECT grade into stu_grade FROM grade WHERE student_no=stu_no AND course_no=cour_no; IF stu_grade>=90 THEN
SELECT stu_grade,'A';
ELSEIF stu_grade<90 AND stu_grade>=80 THEN
SELECT stu_grade,'B';
ELSEIF stu_grade<80 AND stu_grade>=70 THEN
SELECT stu_grade,'C';
ELSEIF stu_grade70 AND stu_grade>=60 THEN
SELECT stu_grade,'D'; ELSE
SELECT stu_grade,'E'; END IF; END

注意:IF作为一条语句,在END IF后需要加上分号“;”以表示语句结束,其他语句如CASE、LOOP等也是相同的。

INNER JOIN

内连接是最常见的一种连接,只连接匹配的行。
inner join语法
select column_name(s)from table 1INNER JOIN table 2ONtable 1.column_name=table 2.column_name
注释:INNER JOIN与JOIN是相同

INNER JOIN产生的结果集中,是1和2的交集。

LEFT JOIN

LEFT JOIN返回左表的全部行和右表满足ON条件的行,如果左表的行在右表中没有匹配,那么这一行右表中对应数据用NULL代替。
LEFT JOIN 语法
select column_name(s)from table 1LEFT JOIN table 2ON table 1.column_name=table 2.column_name
注释:在某些数据库中,LEFT JOIN 称为LEFT OUTER JOIN

LEFT JOIN产生表1的完全集,而2表中匹配的则有值,没有匹配的则以null值取代。

RIGHT JOIN

RIGHT JOIN返回右表的全部行和左表满足ON条件的行,如果右表的行在左表中没有匹配,那么这一行左表中对应数据用NULL代替。
RIGHT JOIN语法
select column_name(s)from table 1RIGHT JOIN table 2ON table 1.column_name=table 2.column_name
注释:在某些数据库中,RIGHT JOIN 称为RIGHT OUTER JOIN

RIGHT JOIN产生表2的完全集,而1表中匹配的则有值,没有匹配的则以null值取代

FULL OUTER JOIN

FULL JOIN 会从左表 和右表 那里返回所有的行。如果其中一个表的数据行在另一个表中没有匹配的行,那么对面的数据用NULL代替
FULL OUTER JOIN语法
select column_name(s)from table 1FULL OUTER JOIN table 2ON table 1.column_name=table 2.column_name

FULL OUTER JOIN产生1和2的并集。但是需要注意的是,对于没有匹配的记录,则会以null做为值。

case when then

SELECT a.username as 用户名,
(select dmnr from yinzhang.t_sys_code where dmbh =
(select case seal_type
WHEN 10 THEN 'SealType'
WHEN 20 THEN 'sealzystype'
when 30 then 'SealType'
when 40 then 'SealType'
when 50 then 'other_seal'
when 60 then 'SealType'
END
from yinzhang.b_order where orderid=a.orderid) and dmz = (select case seal_type
WHEN 20 THEN (select s_type from yinzhang.b_order_seal_2 where orderid = a.orderid)
when 50 then (select s_type from yinzhang.b_order_seal_5 where orderid = a.orderid)
else seal_type
END
from yinzhang.b_order where orderid=a.orderid)
) as 印章类型,
a.telephone as 电话 , a.address as 地址,
ifnull(d.content,'') as 发票户头
FROM yinzhang.b_order as a
left join yinzhang.b_order_invoice_detail c on a.orderid=c.orderid
left join yinzhang.b_order_invoice d on c.invoiceid=d.id
where a.validflag = 1 order by a.username;

  1. case when then else end 的使用:
    SQL> select
    2 count(case when u.sex=1 then 1 end)男性,
    3 count(case when u.sex=2 then 1 end)女,
    4 count(case when u.sex <>1 and u.sex<>2 then 1 end)性别为空
    5 from users u;

男性 女 性别为空---------- ---------- ----------
3 2 0
SQL> select
2 sum(case u.sex when 1 then 1 else 0 end)男性,
3 sum(case u.sex when 2 then 1 else 0 end)女性,
4 sum(case when u.sex <>1 and u.sex<>2 then 1 else 0 end)性别为空
5 from users u;

男性 女性 性别为空---------- ---------- ----------
3 2 0
SQL> select u.id,u.name,
2 (case u.sex
3 when 1 then '男'
4 when 2 then '女'
5 else '空的'
6 end
7 )性别
8 from users u;

ID NAME 性别--------------------------------------- -------------------- ------
1 张一 空的
2 张二 男
3 张三 空的
4 张四 空的
5 张五 女
6 张六 男
7 张七 女
8 张八 男
8 rows selected

发布于 2023-04-17 13:34・IP 属地山东SQL 2000SQL 效率SQL​赞同​添加评论​分享​喜欢​收藏​设置

标签:JOIN,数据库,when,语法,stu,mysqldump,sql,table,部分
From: https://www.cnblogs.com/cps666/p/17339432.html

相关文章

  • 第三章部分例题(6)
    例3-13值传递与引用传递的比较设计思路:通过函数对数值进行改变观察值传递与应用传递后原数值的变化代码:#include<iostream>#include<iomanip>usingnamespacestd;voidfiddle(intin1,int&in2){in1+=100;in2+=100;cout<<"Thevaluesare";cout<......
  • SqlParser
    SqlParser基本概念SqlUtil.andExpressions:拼接查询条件。SqlParser:sql转换器,将sql字符串转换为sql语法树SqlNode:sql语法树基础元素SqlParserPos:为当前元素在sql语法树中位置SqlKind:节点类型SqlCall:语句节点,用于判断语句类型SqlBasicCall:最小单位的完整sql节点例如AS,JOIN,......
  • [转]MySQL怎么将字符串转为datetime类型
    原文地址:https://zhuanlan.zhihu.com/p/553928079以前只知道第一种方法:方法1:使用str_to_date()函数str_to_date()是专门的字符串转日期函数,可以将字符串转换为日期时间值。str_to_date(str,format)str:必须项。要格式化为日期的字符串format:必须项。要使用的格式。例......
  • mysql给查询加序号
    SELECT*FROMstudent; SELECT`name`,`subject`,`score`,(@i:=@i+1)AS'序号'FROMstudent,(SELECT@i:=0)ASitable; ......
  • SQL JOIN的常见连接算法(转载)
    原文:https://zhuanlan.zhihu.com/p/495442432在数据库和大数据领域,通过SQL中的JOIN连接将两个及两个以上的表(或中间表、视图、物化视图)中的数据按指定的连接条件关联起来,是很常用也很方便的操作。我们前面学习了JOIN有多种常见连接方式如内连接INNERJOIN、左外连接LEFTJOIN等......
  • 将MySQL当中的数据表在PHP当中转换成数组并打印,为什么没有显示到网页上面呢?
    如果你已经成功将MySQL中的数据表转换成了PHP数组,并且没有在网页上看到输出,那么可能是因为你没有将数组中的数据正确地渲染到HTML代码中。以下是一个简单的示例代码,演示如何将PHP数组转换为HTML表格并输出到网页上:phpCopycode<?php//连接到MySQL数据库$servername="local......
  • MYSQL---主从同步概述与配置
    一、MYSQL主从同步概述1、什么是MySQL主从同步?实现数据自动同步的服务结构主服务器(master):接受客户端访问连接从服务器(slave):自动同步主服务器数据2、主从同步原理Maste:启用binlog日志Slave:Slave_IO:复制master主机binlog日志文件的SQL命令到本机的relay-log(中继日志......
  • 通过docker启动mysql
    一、启动mysql1.下载mysqldockerpullmysql:5.7#具体可以去dockerhub中查找想要的版本2.启动mysqldockerrun-d-p3306:3306mysql:5.7--namemysql01-eMYSQL_ROOT_PASSWORD="123"-v/data/mysql/datadir:/var/lib/mysql-v/data/mysql/my.cnf:/etc/......
  • springboot启动自动执行sql脚本
    一:packagecom.lianzhu.bigdata.config;importlombok.extern.slf4j.Slf4j;importorg.springframework.beans.factory.annotation.Autowired;importorg.springframework.boot.CommandLineRunner;importorg.springframework.boot.autoconfigure.EnableAutoConfigurati......
  • makedown语法
    这是一级标题这是二级标题这是三级标题#这个Python代码块print("helloworld!!!")#这个shell语句ifconfig引用:这是引用内容有序排序helloworld无序排序helloworld姓名年龄小明18加粗字体斜体字体加粗斜体字体这是个百度123超链接地......