首页   

SQL基础语句大全

爱学习的亮亮  ·  · 4 年前

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或多个未知字符
  • _ :代表一个未知字符
  1. 以x开头 x%
  2. 以y结尾 %y
  3. a开头b结尾 a%b
  4. 第二个字符是x _x%
  5. 包含x %x%
  6. 第三个字符是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!='孙悟空';
推荐文章
最搞笑笑话王  ·  董事长三年后,原配却要求复合,结局感人  ·  5 月前  
神奇麻麻在哪里  ·  用了这么多网红面膜,我写了最全的体验报告!  ·  5 年前  
广东财经大学  ·  广东财经大学2018年招生宣传咨询会及信息发 ...  ·  5 年前  
小鹿情感先生  ·  为什么女生都被动?分清状况才能对症下药!  ·  6 年前  
© 2022 51好读
删除内容请联系邮箱 2879853325@qq.com