初级程序需要掌握的SQL(一)
之前我也是,是一个看视频学习的小白,以前老是喜欢通宵看视频,一天10小时小时的学习量,一点效率都没有,就想写一个博客,来帮助大家回顾的SQL语句, 因为我也是初级,所以名字就叫初级程序员需要掌握的sql
嘻嘻~ 如果大家觉得文章不错,就希望大家关注一下,麻烦了
SQL 的基本操作
基本操作:CURD,即增删改查。
根据操作对象的不同,咱们可以将 SQL 的基本操作分为三类,分别为:库操作、表(字段)操作和数据操作。
如果说整个Java体系非要用四个字来描述的话那就是增删改查工程师 甚至通俗点说就叫查询工程师
MySQL中查询占了80%
我们先来回顾一下,那些年我们学习的基础SQL语句 ~ !
库和表的删除与创建
查看数据库
show databases;
选择数据库
use 数据库名;
创建数据库
CREATE DATABASE 数据库名;
如果不存在,则创建数据库
CREATE DATABASE if not exists 数据库名 default character set ='utf8';
删除数据库
DROP DATABASE 数据库名;
创建表
create table 表名(
列名1 类型(长度) [约束],
列名2 类型(长度) [约束],
……
);
删除表
DROP TABLE 表名;
表约束
1.非空约束 NOT NULL
2.默认值约束 DEFAULT '男'
3.唯一约束 UNIQUE
4.主键约束 PRIMARY KEY
查看表结构
DESC 表名
修改表
修改列名
Alter table 表名 change 列名 新列名 类型;
修改列类型
Alter table 表名 change 列名 列名 新类型;
修改列类型
Alter table 表名 change 列名 列名 新类型;
修改列类型
Alter table 表名 modify 列名 新类型;
单表查询操作
查询表中全部内容
select * from 表名;
查询表中指定列的信息 (推荐)
select 列1,列2 from 表名;
数据去重
select distinct 列1,列2 From 表名;
拼接结果
select concat(列1,列2) from 表名;
运算符优先级:
1.乘法和除法的优先级高于加法和减法
2.同级运算的顺序是从左到右
3.表达式中使用"括号"可强行改变优先级的运算顺序
select 列1[+-*/]列2 from 表名;
设置别名(注意:关键字as可以省略)
select 列 as 别名 from 表名;
select 列 别名 from 表名;
条件查询
select 列… from 表名 where 条件;
查看数据库
show databases;
使用数据库
use 数据库名;
创建数据库
CREATE DATABASE 数据库名;
删除数据库
DROP DATABASE 数据库名;
创建表
create table 表名(
列名1 类型(长度) [约束],
列名2 类型(长度) [约束],
……
);
长度区别
int类型带长度:不影响存取值,即使设定的值超出了长度的范畴,也能存,如果没有达到设定的长度,则使用空格自动填充到设定的长度
char类型:不可变字符,设定的长度就是规定当前字段能存的数据的最大长度,若超出长度,则会报错,若没有达到长度,使用空格填充到设定的长度
varchar:可变字符,设定的长度同样是规定当前字段能存的数据的最大长度,若超出长度,则会报错,若没有达到长度,不会使用空格填充,实际多长就是多长
删除表
DROP TABLE 表名;
表约束
1.非空约束 NOT NULL
2.默认值约束 DEFAULT '男'
3.唯一约束 UNIQUE
4.主键约束 PRIMARY KEY
查看表结构
DESC 表名
修改表
修改列名
Alter table 表名 change 列名 新列名 类型;
修改列类型
Alter table 表名 change 列名 列名 新类型;
修改列类型
Alter table 表名 modify 列名 新类型;
数据查询-单表
查询表中全部信息
select * from 表名;
查询表中指定列的信息
select 列1,列2 from 表名;
语句的执行顺序:from—>select
数据去重
select distinct 列…. From 表名;
拼接结果
select concat(列1,列2) from 表名;
运算符优先级:
1.乘法和除法的优先级高于加法和减法
2.同级运算的顺序是从左到右
3.表达式中使用"括号"可强行改变优先级的运算顺序
select 列1[+-*/]列2 from 表名;
设置别名(注意:关键字as可以省略)
select 列 as 别名 from 表名;
select 列 别名 from 表名;
语句的执行顺序:from—>select
条件查询
select 列… from 表名 where 条件;
条件中比较运算符:( 等于:= 大于:> 大于等于:>= 小于:< 小于等于:<= 不等于:!= 或 <> )
where 列 比较运算符 值;
注: 注意:字符串、日期需使用单引号括起来
逻辑运算符( 并且:and 或 && 或:or 非:not 或 ! )
where 条件1 逻辑运算符 条件2;
where not 条件;
范围查询
where 列 between 条件1 and 条件2; //列在这个区间的值
where 列 not between 条件1 and 条件2; //不在这个区间
where !( 列 between 条件1 and 条件2 ); //同样表示不在这个区间
集合查询( 判断列的值是否在指定的集合中 )
where 列 in(值1,值2); //列中的数据是in后的值里面的
where 列 not in(值1,值2); //不是in中指定值的数据
NULL值查询( 注意:列中值为null不能使用=去查询 )
where 列 is null; //查询列中值为null的数据
模糊查询
%:表示0到多个字符,示例
where 列 like '%0'; //表示以0结尾
where 列 like '0%'; //表示以0开头
where 列 like '%0%'; //表示数据中包含0
_:表示一个字符,可多次使用,示例:
where 列 like '%0_'; //数据结尾第二位是0
结果排序( 对查询出的结果按照一列或多列进行升序还是降序排列 升序:asc 降序:desc 注意:不能使用中文的别名排序)
where 条件 order by 列 [asc/desc]
语句的执行顺序:from—>where—>select—>order by
分页查询( beginIndex:表示从第多少条数据开始 pageSize:表示每页显示的数据条数 )
where [条件] limit beginIndex,pageSize;
ex:每页显示3条数据
第一页: SELECT * FROM 表名 LIMIT 0,3 --0,1,2 从0开始,数三条
第二页: SELECT * FROM 表名 LIMIT 3,3 --3,4,5 从三开始,数三条
第三页: SELECT * FROM 表名 LIMIT 6,3 --6,7,8 从六开始,数三条
第四页: SELECT * FROM 表名 LIMIT 9,3 --9,10,11 从九开始,数三条
第七页: SELECT * FROM 表名 LIMIT 18,3 --18,19,20 从十八开始,数、三条
beginIndex公式:(当前页数-1)pageSize
聚集函数( 作用于一组数据,并对一组数据返回一个值 )
COUNT:统计结果记录数,若统计的是列,列中为Null,那么count将不会计算值
MAX: 统计计算最大值
MIN: 统计计算最小值
SUM: 统计计算求和
AVG: 统计计算平均值
分组函数( 注意:如果要对分组后的数据进行筛选,那么必须使用having关键字,条件写在having后 )
select 聚集函数 from 表名 where [条件] group by 列 having 分组后的条件
Where和having的区别:
Where: 先过滤已有的数据(数据是已经存在的),在进行分组,在聚集计算
Having:先分组,在对每组进行计算,根据得到结果在过滤(分组把数据算出之后,在过滤)
注意:使用having的时候,它是可以使用别名的
数据查询-多表
多表是一个比较重要的概念,大家能理解的话,已经步入初级程序员了
交叉连接:又名笛卡尔积,使用交叉连接会产生笛卡尔积
假设集合A={a, b},集合B={0, 1, 2},则两个集合的笛卡尔积为{(a, 0), (a, 1), (a, 2), (b, 0), (b, 1), (b, 2)}。
select * from 表1,表2
内连接:过滤为空的数据(查询的实际上是两张表数据的交集部分) 目的 ==》解决笛卡尔积现象.
select * from 表1,表2 where 表1.字段=表2.字段; //隐式内连接,使用where条件消除笛卡尔积
select * from 表1 [inner] join 表2 on 表1.字段=表2.字段; //显式内连接,如果是多张表,则一直在join..on后依次添加join..on即可,inner关键字可被省略
外连接:左外连接、右外连接、全外连接
左外连接:以左边表为主,返回左边表中所有数据,若右表中无数据,则显示为NULL,请参考实际查询结果来理解
select * from 表1 left [outer] join 表2 on 表1.字段=表2.字段; //表1为左表,表2为右表,outer关键字可被省略
右外连接:以右边表为主,返回右表中所有数据,若左表中无数据,则显示为NULL,结合实际查询结果来理解
select * from 表1 right [outer] join 表2 on 表1.字段=表2.字段; //表1为左表,表2为右表,outer关键字可被省略
全外连接:返回涉及的多表中的所有数据,MYSQL中不支持该查询,仅限了解自连接:单表当作多表查询,直白的讲就是一张表中数据含有多种关系,使用多表查询的语法,来查询一张表,
查询过程中一定要使用别名,多用在分类数据、省市县分类数据、权限…
select 表1.字段1,表2.字段2 from 表名 as 表1,表名 as 表2 where 表1.字段1=表2.字段2
子查询:将一个查询结果作为另一个查询的对象,直白的讲就是SQL语句嵌套
select * from (select * from 表名) as 别名
select * from where 条件->条件中包含查询语句
子查询:将一个查询结果作为另一个查询的对象,直白的讲就是SQL语句嵌套
select * from (select * from 表名) as 别名
select * from where 条件->条件中包含查询语句
注意:1.查询结果的虚拟表必须取别名
2.字段与关键字一样,冲突时,需要给字段名加``,(Esc键下面、1的左边)
3.如果给虚拟结果表中的字段取了别名,则对虚拟结果表查询时,应该用 表别名.虚拟表字段别名
插入数据语法
注意: 1.如果插入的表中的主键是自增类型的,可以不用插入值
2.如果主键是非自增 ,插入的数据则是填补主键字段值空余的值
3.如果主键设置了自动递增,会从主键字段最大值开始插入数据
插入一条数据
insert into 表名(字段1,字段2..) values(值1,值2…);
其余插入方式
insert into 表名(字段1,字段2) values(值1,值2),(值1,值2); //插入多条数据【MYSQL】
insert into 表名 values(值1,值2); //针对全表所有字段进行插入操作
insert into 表名(字段) select 字段 from 表2; //查询结果插入
insert into 表名 select 字段 from 表2; //查询结果,全表插入
修改数据语法
update 表 set 字段=值 where 条件; //带条件修改指定数据,否则修改全表
删除数据语法
delete from 表 where 条件; //删除数据带条件指定数据,否则删除全表数据
数据备份
mysqldump -u账户 -p密码 数据库名称>脚本文件存储地
ex: mysqldump -uroot -proot mybatis> D:/mail.sql
导入:
mysql -u账户 -p密码 数据库名称< 脚本文件存储地址
数据索引
索引的作用相当于图书的目录,可以根据目录中的页码快速找到所需的内容。
什么列适合建索引??
1.表的主键、外键必须有索引;
2.数据量超过30000的表应该有索引;
3.经常与其他表进行连接的表,在连接字段上应该建立索引;
4.经常出现在Where子句中的字段,特别是大表的字段,应该建立索引;
5.索引应该建在选择性高的字段上;
6.索引应该建在小字段上,对于大的文本字段甚至超长字段,不要建索引;
sql语句创建和删除索引:
创建索引:
CREATE INDEX 索引名称 ON 表名 (列名)
删除索引:
方式一:
DROP INDEX 索引名 ON 表名
方式二:
ALTER TABLE 表名 DROP INDEX 索引名
初级程序需要掌握的SQL(一)的更多相关文章
- Java进阶之路——从初级程序员到架构师,从小工到专家
原创文章 怎样学习才能从一名Java初级程序员成长为一名合格的架构师,或者说一名合格的架构师应该有怎样的技术知识体系,这是不仅一个刚刚踏入职场的初级程序员也是工作三五年之后开始迷茫的老程序员经常会问到 ...
- 以技术面试官的经验分享毕业生和初级程序员通过面试的技巧(Java后端方向)
本来想分享毕业生和初级程序员如何进大公司的经验,但后来一想,人各有志,有程序员或许想进成长型或创业型公司或其它类型的公司,所以就干脆来分享些提升技能和通过面试的技巧,技巧我讲,公司你选,两厢便利. 毕 ...
- 程序员眼中的 SQL Server-执行计划教会我如何创建索引?
先说点废话 以前有 DBA 在身边的时候,从来不曾考虑过数据库性能的问题,但是,当一个应用程序从头到脚都由自己完成,而且数据库面对的是接近百万的数据,看着一个页面加载速度像乌龟一样,自己心里真是有种挫 ...
- 如何向非技术人(程序猿)解释SQL注入?
前两天看博客园新闻,有一篇文章名为<我该如何向非技术人解释SQL注入?>(http://kb.cnblogs.com/page/515151/).是一个外国人写的,伯乐在线翻译的.我当时看 ...
- (摘至)程序员老鸟写sql语句的经验之谈
做管理系统的,无论是bs结构的还是cs结构的,都不可避免的涉及到数据库表结构的设计,sql语句的编写等.因此在开发系统的时候,表结构设计是否合理,sql语句是否标准,写出的sql性能是否优化往往会成为 ...
- Java 程序员在写 SQL 时常犯的 10 个错误
Java程序员编程时需要混合面向对象思维和一般命令式编程的方法,能否完美的将两者结合起来完全得依靠编程人员的水准: 技能(任何人都能容易学会命令式编程) 模式(有些人用“模式-模式”,举个例子,模式可 ...
- 程序员老鸟写sql语句的经验之谈
做管理系统的,无论是bs结构的还是cs结构的,都不可避免的涉及到数据库表结构的设计,sql语句的编写等.因此在开发系统的时候,表结构设计是否合理,sql语句是否标准,写出的sql性能是否优化往往会成为 ...
- 在打包程序中自动安装SQL Server数据库 .
原文:在打包程序中自动安装SQL Server数据库 . 1.创建安装项目“Setup1”安装项目 在“文件”菜单上指向“添加项目”,然后选择“新建项目”. 在“添加新项目”对话框中,选择“项目类型” ...
- 为什么要重写hashcode和equals方法?初级程序员在面试中很少能说清楚。
我在面试 Java初级开发的时候,经常会问:你有没有重写过hashcode方法?不少候选人直接说没写过.我就想,或许真的没写过,于是就再通过一个问题确认:你在用HashMap的时候,键(Key)部分, ...
随机推荐
- 通过Camtasia来添加各种各样的光标效果
在十几二十年前的时候,我们想要学习新的知识需要到学校和培训班才行,但是现在只要有一台电脑.一部手机或者平板,我们在家里也能找到我们喜欢的课程来学习了,微课也因此而生. 同样的,有了想要学习知识的学生, ...
- 类虚拟机软件CrossOver是什么?它的优势在哪里?
虚拟机软件对于很多人来说已经不是一个陌生的词汇了.我们可以通过软件来模拟具有完整硬件系统功能的计算机系统.比如我们可以在Mac OS系统上模拟Windows 7 的系统,以此来安装我们想要使用的应用程 ...
- Tuxera Disk Manager轻松解决硬盘格式转换问题
生活中经常会遇到硬盘格式转换的问题,很多小伙伴都不知道怎么进行操作,特别是Mac小白们.今天,小编想要给不熟悉Mac系统的小伙伴推荐一款专业且高效的磁盘管理工具--Tuxera NTFS,可以帮助我们 ...
- 思维导图iMindMap怎么做大型项目管理
在大型企业中,有许多大型而复杂的项目,你要考虑内外部因素.期限以及你要达成的目标等等,所以我们要进行项目管理.下面小编教你怎么用iMindMap思维导图进行项目管理. iMindMap有一个工作区,以 ...
- jmeter测试udp
jemter本身不支持udp测试,需要下载安装第三方插件,或者下载一个插件管理器(下面那个蝴蝶一样的图标),里面有各种插件可以供你下载 下载链接:https://jmeter-plugins.org/ ...
- 使用github actions 完成一些自动化工作
github actions 是什么? github actions是github的持续集成及自动化工作流服务,使用起来都比较方便.大部分github actions都可以在https://githu ...
- day4(JWT介绍)
1.JWT介绍 1.1jwt原理 最简单理解:jwt本质就是, 把用户信息通过加密后生成的一个字符串 JWT的原则是在服务器身份验证之后,将生成一个JSON对象并将其发送回用户 { "Use ...
- django+celery+redis应用
一.celery介绍 1.应用场景 a. Celery 是一个 基于python开发的分布式异步消息任务队列,通过它可以轻松的实现任务的异步处理,如果你的业务场景中需要用到异步任务,就可以考虑使用ce ...
- C++编程指南续(4-5)
五.常量 常量是一种标识符,它的值在运行期间恒定不变.C语言用 #define来定义常量(称为宏常量).C++ 语言除了 #define外还可以用const来定义常量(称为const常量). 5.1 ...
- 第15.35节 PyQt编程实战:结合QDial实现的QStackedWidget堆叠窗口程序例子
老猿Python博文目录 专栏:使用PyQt开发图形界面Python应用 老猿Python博客地址 一.案例说明 本案例是老猿在学习QStackedWidget中的一个测试案例,该案例使用QStack ...