工作时发现自己手写SQL能力很低,特此再来学习一遍SQL

devtools/2024/11/16 20:29:51/

SQL语法

①常用的数据库本身的操作

# 显示数据库列表
show databases;# 使用某个数据库
use twbpm_dev;# 创建一个数据库
create database db_test;# 删除一个数据库
drop database if exists db_test;# 显示数据库中所有的表
show tables;# 查看MySQL的版本
select version();
show variables like 'version';

②创建操作 

# 创建表
create table testTable(id int(19) not null primary key ,name varchar(50) not null ,address varchar(100),phone char(11)
);
create table 新表 as select * from 旧表# 创建索引
create index i_testIndex on testTable(name);# 创建视图
create view v_testView as select * from testTable;

③新增操作 

# 插入数据
insert into testTable value (10000001,"张三","湖南省长沙市xxxxxxxx",12345678643);
insert into testTable values (10000001,"张三","湖南省长沙市xxxxxxxx",12345678643),(10000002,"李四","广东省深圳市xxxxxxxx",12345456789);# 查询结果当新增
insert into testTable select * from testTable01;# 批量插入大量数据
LOAD DATA INFILE '/path/to/data.txt'     //读取文件
INTO TABLE testTable                     //选择目标表
FIELDS TERMINATED BY ','                 //指定文件中字段分隔符
ENCLOSED BY '“'                          //在“”中的字符都会被当做一个列数据
LINES TERMINATED BY '\n'                 //指定行分隔符
IGNORE 1 LINES                           //忽略第1行的数据
(column_list);                           //要插入的列,可以不写默认为全部列

 为什么LOAD DATA比逐行INSERT效率要高?

④更新、删除操作

# 更新
update testTable set name = 'mike' where id = '11110011';
update testTable set name = 'amy';    //如果不加条件会把所有的数据的name行更新为amy# 删除表数据
delete from testTable;                //如果不加条件会把所有的数据都删除(索引、表结构不会变)# 删除索引
drop index if exists i_testIndex on testTable;# 删除表本身
drop table if exists testTable;# 删除视图
drop view if exists vivw_name;

⑤排序操作

# 排序
select * from testTable 
order by id , phone desc;   //先按照id升序排序,如果id相同的则按照phone降序排序

 ⑥修改操作

# 添加一个新的列
alter table testTable
add new_column varchar(255);# 删除一个列
alter table testTable
drop column column_name;# 修改列数据类型
alter table testTable
alter column new_column char(11);

 ⑦Limit、In、Union

# limit
select * from testTable limit 3;   //一个参数的时候是返回数据的前3行
select * from testTable limit 2(pageNum),3(pageSize);//两个参数的时候是分页,pageNum页码,pageSize页大小# in
select * from testTable where id in (value1,value2.....、也可以接子查询、列表、集合)# union   //union的两边必须要是相同的列
SELECT column1, column2, ...FROM table1
UNION                                           //union会去重
SELECT column1, column2, ...FROM table2;
# union all
SELECT column1, column2, ...FROM table1
UNION ALL                                       //union all会保留所有的数据
SELECT column1, column2, ...FROM table2;

⑧连接操作

⑨XML文件中的标签

<!--select标签-->   作用:与mapper接口对应,并且指定返回数据类型
<select id="selectByPrimaryKey"  resultType="com.exzample.bean.User">select ....
</select> <!--if标签-->       作用:test进行判断,如果条件满足,则会把标签内的sql语句拼到最终查询语句中
<select id="selectByPrimaryKey"  resultType="com.exzample.bean.User">select * from product<if test="name!=null">where name like concat('%',#{name},'%')</if> 
</select> <!--where标签-->     作用:当where标签中没有一个if标签成立时,where会被去掉
<select id="listProduct" resultType="com.exzample.bean.User">select * from product<where><if test="name!=null">and name like concat('%',#{name},'%')</if>        <if test="price!=null and price!=0">and price > #{price}</if></where>     
</select><!--foreach标签-->    作用:循环遍历集合(item:单个元素 collection:集合名字 separator:分隔符 index:元素的索引)
<select id="listProduct" resultType="com.exzample.bean.User">select * from productwhere id in<foreach item="code" collection="itemCodes" separator="," open="(" close=")" index="index">#{item}</foreach>
</select><!--sql标签 、include标签-->    作用:定义sql片段,并且引用拼接sql片段
<sql id="sqlTerm">order_id,cid,address,create_date
</sql>
<select id="listProduct" resultType="com.exzample.bean.User">select <include refid="sqlTerm" />from ordertable where order_id = #{orderId}
</select>

⑩写SQL时应该注意到的点 

# null不能直接与数值型进行比较
select name from Customer where referee_id != 2 or referee_id is null;


http://www.ppmy.cn/devtools/134510.html

相关文章

docker使用,docker图形化界面+docker详细命令

DockerUI进入 docker container run --rm --name docker.ui -v /var/run/docker.sock:/var/run/docker.sock -p 8999:8999 joinsunsoft/docker.ui访问8999端口就行&#xff0c;就可以图形化管理Docker了 常规使用 搭建 sudo docker-compose build #有一些需要这条命令 su…

Spring Boot编程训练系统:开发中的挑战与解决方案

摘要 随着信息技术在管理上越来越深入而广泛的应用&#xff0c;管理信息系统的实施在技术上已逐步成熟。本文介绍了编程训练系统的开发全过程。通过分析编程训练系统管理的不足&#xff0c;创建了一个计算机管理编程训练系统的方案。文章介绍了编程训练系统的系统分析部分&…

回顾二维数组——数组指针部分

数组指针才真正等同于二维数组名 数组指针&#xff1a; 当运行下面的代码的时候&#xff0c;会有警告&#xff0c;偏移量不同&#xff0c;arr偏移的是整行数组&#xff0c;与注释的p不同&#xff0c;如果p&arr[0][0],p表示的就是依次、连续的12个元素地址&#xff0c;偏移…

django入门【05】模型介绍(二)——字段选项

文章目录 1、null 和 blank示例说明⭐ null 和 blank 结合使用的几种情况总结&#xff1a; 2、choices**choices 在 Django 中有以下几种形式&#xff1a;**&#xff08;1&#xff09; **简单的列表或元组形式**&#xff08;2&#xff09; **字典映射形式**&#xff08;3&#…

【HarmonyOS】鸿蒙应用低功耗蓝牙BLE的使用心得 (三)

【HarmonyOS】鸿蒙应用低功耗蓝牙BLE的使用心得 &#xff08;三&#xff09; 一、前言 目前鸿蒙最新系统&#xff0c;经过测试还有两个BLE相关Bug正在修复&#xff1a; 1.获取本地设备蓝牙名称&#xff0c;会为空&#xff0c;只有点击到设置蓝牙中查看后&#xff0c;该接口才能…

路由器基本原理与配置

一 &#xff0c; 路由是什么&#xff1f; 从源主机到目标主机的转发过程&#xff1b; 二 &#xff0c; 路由器 &#xff08;1&#xff09;路由器的工作原理 路由器是一种三层设备&#xff0c;是使用IP地址寻址&#xff0c;实现从源IP到达目标IP地址的端到端的服务&#xff0c…

Emacs进阶之插入时间信息(一百六十三)

简介&#xff1a; CSDN博客专家、《Android系统多媒体进阶实战》一书作者 新书发布&#xff1a;《Android系统多媒体进阶实战》&#x1f680; 优质专栏&#xff1a; Audio工程师进阶系列【原创干货持续更新中……】&#x1f680; 优质专栏&#xff1a; 多媒体系统工程师系列【…

通过wsl配置Qt的中文开发环境

本文列举了一些在WSL上配置Qt编译环境中遇到的一些问题及解决方案 关键词: Win10 22HUbuntu18.04xfce桌面交叉编译arm64qt / qtcreator中文输入及显示标题 安装qt,qtcreatorqt.qpa.screen: QXcbConnection: Could not connect to displayld: cannot find -lGLqmake: could no…