大家好,又见面了,我是你们的朋友全栈君。
SQL基础语句大全
此文章基本涵盖SQL的基础应用语句
你好! 这是本人在大学自学Java时记录的SQL基础语句,希望可以对自学的小白们给与一定帮助,有错误也欢迎大家可以帮助纠正。
数据类型
1.整数: int和bigint bigint等效Java中的long
2.浮点数:double(m,d) m总长度 d小数长度 eg:double(5,3) 26.789
decimal是一个超高精度的浮点数,精度远高于double,只有涉及到超高精度运算时才会使用到
3.字符串:varchar(m) 可变长度(节省空间)最大字符长度65535但是超过255建议用text可变长度
字符串类型 长度65535.
char(m)不可变长度 char(5) “abc” 占5 最大字符长度255
4.日期类型:
-date:只能保存年月日
-time:只能保存时分秒
-datetime:默认值null 最大值9999-12-31
-timestamp:时间戳 默认值当前系统时间 2038-1-19
数据库相关
1.查询所有数据库
-格式:show databases;(分号不要忘)
2.创建数据库
-格式:create database 数据库名;
-指定字符集格式:create database 数据库名 character set utf8/gbk;
3.查看数据库详情
-格式:show create database 数据库名;
4.删除数据库
-格式:drop database 数据库名;
5.使用数据库
-格式:use 数据库名;
表相关
-切记操作表和数据库时一定要保证已经使用了数据库,如下操作:
create database db1;
use db1;
1.创建表
-格式:create table 表名(字段1 字段1类型,字段2 字段2类型…)
create table person(name varchar(10),age int)
2.查询所有表
-格式:show tables;
3.查询表详情
-格式:show create table 表名;
4.创建表时指定字符集
-格式:create table 表名(字段1 字段1类型,字段2 字段2类型…) charset=utf8/gbk
create table t1(name varchar(10)) charset=gbk;
5.查询表字段信息
-格式:desc 表名;
6.删除表
-格式:drop table 表名;
7.添加表字段
-最后添加格式:alter table 表名 add 字段名 类型;
-最前添加格式:alter table 表名 add 字段名 类型 first;
-最xxx后面添加格式:alter table 表名 add 字段名 类型 after xxx;
8.删除表字段
-格式:alter table 表名 drop 字段名;
9.修改表字段
-格式:alter table 表名 change 原名 新名 新类型;
DML DataManiputlation Language数据操作语言 (增删改查)
1.插入数据
-全表格式:insert into 表名 values(值1,值2,值3);
-指定字段插入格式:insert into表名(字段1名,字段2名) values(值1,值2);
-批量插入:insert into 表名 values(值1,值2,值3),(值1,值2,值3)…
中文问题:insert into person values(3,‘Liang’,22),(4,‘刘德华’,26);
如果执行上面代码出错则使用下面代码后执行
set names gbk;
mysql处理数据有两个地方需要进行编码和解码,每隔地方的编解码要保证字符集
一致,网络数据传输有一对编解码,往磁盘中保存和读取数据有一对编解码,创建
数据库和表时指定的字符集时服务于后者的,set names gbk是服务于前者的。
2.修改数据
-格式:update 表名 set 字段名=xxx,字段名=xxx where 条件;
update person set age=30 where name='Tom';
update person set age=80 where id=4;
3.删除数据
-格式:delete from 表名 where 条件;
delete from person where id=5;
delete from person where age=80;
delete from person;
DQL Data Query Language 数据查询语言 (查)
-格式:select 字段信息 from 表名 where 条件;
select name from person;//查询表中所有的名字
select name from person where id<5;//查询表中所有id<5的名字
select * from person where id>=5;//查询表中所有id>=5的名字
主键约束
-约束:创建表时给表字段添加的限制条件(相当于字段的身份证)
-主键:表示数据唯一性的字段称为主键
-主键约束:唯一且非空
create table t1(id int primary key,name varchar(10));
insert into t1 values(1,'aaa');
insert into t1 values(2,'aaa');
insert into t1 values(3,'bbb');
insert into t1 values(4,'ccc');
主键约束+自增 auto_increment
-从历史最大值+1 只增不减
create table t2(id int primary key auto_increment,name varchar(10));
insert into t2 values(null,'aaa'); //1
insert into t2 values(null,'aaa'); //2
insert into t2 values(10,'bbb'); //10
insert into t2 values(null,'ccc'); //11
delete from t2 where id>=10;
insert into t2 values(null,'ddd'); //12
注释 comment
-创建表时给字段添加的介绍
create table t3(id int comment '这是主键',name varchar(10) comment '这是名字');
导入*.sql文件
-Linux系统:把文件放到桌面
source /home/soft01/桌面/emp.sql;
-Windows系统:把文件放到d盘根目录
source d:/emp.sql;
-检查是否成功
1.show databases;查看是不是出现了一个newdb3数据库
2.use newdb3; 使用导入的这个数据库;
3.show tables; 查看是否有emp和dept的表
4.select * from emp; 查看emp表中的数据是否存在
is null和is not null
1.查询没有上级领导的员工信息
select * from emp where mgr is null;
2.查询有上级领导的员工信息
select * from emp where mgr is not null;
去重 distinct
1.查询员工所从事的职业
select distinct job from emp;
比较运算符 > < >= <= = !=和<>都表示不等于
1.查询工作不是程序员的员工姓名和工作
select ename,job from emp where job!='程序员';
select ename,job from emp where job<>'程序员';
and和or
-and类似Java中的 &&
-or类似Java中的 ||
1.查询1号部门工资低于1500的员工信息
select * from emp where deptno=1 and sal<1500;
2.查询2号部门员工或工资高于2000的员工姓名,工资,部门编号
select ename,sal,deptno from emp where deptno=2 or sal>2000;
between x and y 包含x和y
1.查询工资在2000到3000之间的员工姓名和工资
select ename,sal from emp where sal between 2000 and 3000;
in(值1,值2,…) 条件等于多个值
1.查询工资等于800,3000,1500的员工信息
select * from emp where sal in(800,3000,1500);
模糊查询like
- %:代表0或多个未知字符
- _ :代表一个未知字符
- 以x开头 x%
- 以y结尾 %y
- a开头b结尾 a%b
- 第二个字符是x _x%
- 包含x %x%
- 第三个字符是x倒数第二个字符是 _ _x%y _
排序
-格式:order by 字段名(默认升序 desc降序)
分页查询
-格式:limit 跳过的条数,请求的条数
各种关键字的顺序
-select … from 表名 where … order by … limit…;
别名
-给查询的字段起一个别的名字
select ename as '名字' from emp;
聚合查询:对查询的多条数据进行统计查询
1.平均值 avg(字段)
-查询一号部门的平均工资
select avg(sal) from emp where deptno=1;
2.最大值(字段)
-查询一号部门的最高工资
select max(sal) from emp where deptno=1;
3.最小值(字段)
-查询员工表中的最低工资
select min(sal) from emp;
4.求和 sum(字段)
-查询2号部门的工资总和
select sum(sal) from emp where deptno=2;
5.计数 count(字段)不为null计数
-查询一共有多少个员工一般场景使用*即可
select count(*) from emp;
分组查询: group by 字段;
-如果需求中出现每个或每种这样的关键字,则使用分组查询
-查询每个部门的平均工资
select deptno,avg(sal) from emp group by deptno;
-查询每个部门的最高工资
select deptno,max(sal) from emp group by deptno;
-查询每种职位的工资总和
select job,sum(sal) from emp group by job;
-查询每种职位的员工总数
select job,count(*) from emp group by job;
-查询每个部门工资大于1500的员工人数
select deptno,count(*) from emp where sal>1500 group by deptno;
-查询1号和3号部门的最低工资
select deptno,min(sal) from emp where deptno in(1,3) group by deptno;
having 如果条件是聚合函数的条件 则必须使用having,并且having要和group by结合使用
-查询每个部门的平均工资 要求平均工资大于2000;
select deptno,avg(sal) from emp group by deptno having avg(sal)>2000;
-查询每个部门的平均工资,值查询工资在1000-3000之间的员工,并且过滤掉平均工资低于2000的部门
select deptno,avg(sal) from emp where sal between 1000 and 3000 group by deptno having avg(sal)>=2000;
子查询(嵌套查询)
-查询工资高于员工平均工资的员工信息
select * from emp where sal>(select avg(sal) from emp);
-查询工资最高的员工信息
select * from emp where sal=(select max(sal) from emp);
-查询工资高于2号部门的平均工资的员工信息
select * from emp where sal>(select avg(sal) from emp where deptno=2);
-查询和孙悟空相同工作的其他员工信息
select * from emp where job=(select job from emp where ename='孙悟空') and ename!='孙悟空';
发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/133612.html原文链接:https://javaforall.cn
【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛
【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...