SQL基本语法

数据库的引入

1.数据的存储:

JavaSE:定义一个变量,它都存储在内存里,
当程序执行完了,这个变量就从内存中消失了。

2.JavaSE->IO 流程对数据进行读写,执行效率低。
3.数据库的软件:

对数据永久保存
执行效率高
方便维护和管理

4.常见数据库软件:

oracle:甲骨文公司的产品,和java语言兼容性比较好,大型应用:javaEE
mySQL:开源的数据库,和java语言兼容比较好!,针对中小型的应用
SQLServer:微软公司产品,和net平台兼容性最好(C#)
DB2:是IBM公司的
manggoDB:noSql


SQL:结构化查询语言

1.概念:

通过sql语言可以操作所有的关系型数据库。每种数据库之间会存在差异,称为 “方言”

2.sql分类:

DDLData Definition Language):数据定义语言,用来定义数据库对象:库、表、列等;
DMLData Manipulation Language):数据操作语言,用来定义数据库记录(增、删、改)
DCLData Control Language):数据控制语言,用来定义访问权限和安全级别;
DQLData Query Language):数据查询语言,用来查询记录(数据)。


一.(DDL)数据库的创建、修改和删除

操作数据库:?

1.创建一个数据库(DOS)
create database demo02;
2.查看数据库中的指定字符集
show create database demo02;
3.修改创建的数据库中的字符集
alter database demo02default character set gbk;
4.删除数据库
drop database demo02;

操作表:

1.创建表:
在创建一个表之前,要切换到数据库,使用的数据库存在。
语法:create table 表名(字段名称 字段类型,字段名称,字段类型…..)

create table demo(
id int,
age int,
name varchar(10)
);

2.操作表:

a.添加字段
alter table demoadd column job varchar(10);
b.修改字段类型
alter table demomodify column job varchar(5);
c.修改字段名称
alter table demochange column job sex varchar(2);
d.删除字段
alter table demodrop column age;
e.修改表名称
alter table demorename toother;
f.删除表
drop table demo;

3.其他操作:

a.查看当前数据库中所有的表
show tables;
b.查看当前表的结构
desc demo;


二. (DML)操作表中的数据

1.插入数据:

a.插入数据:
insert into 表名 values(每个字段的具体值)
insert into demo values(1,'Ying',21);

关于插入数据的注意事项:
插入字段的值和字段的信息的顺序一致
插入字段的数量要和创建表中参数的数量保持一致

b.插入部分字段:
insert into 表名 values(部分字段的具体值);

2.修改数据:

update 表名 修改 set 字段名称 = 值 where…

a.批量修改数据
update demo set name ='Glaz';
b.修改指定的字段
需求:修改id为1的学生的姓名
update demo set name ='ROOT'where id =1;
c.修改多个字段
需求:修改id为的学生姓名和年龄(修改多个字段,中间用逗号隔开)
update demo set name ='ROOT',age=21 where id =1;

3.删除数据:

a.删除全部表数据
delete from demo;
b.删除指定的字段
需求:删除id=2 的字段
delete from demo where id =2 ;
truncate table 是删除全表数据,只能删除全表数据,不能删除删除单个数据

关于delete from 和truncate table 这两个的区别:

  • delete from 既可以删除全表数据又可以删除指定的数据,而truncate table只能删除全表数据
  • delete from 可以回滚,而truncate table不可以回滚!
  • deleter from 它不可以让自增长约束重置,而truncate table可以让自增长约束重置(重点)

三.(DQL)数据查询(select)

1.select

a.查询所有数据
select *from demo;
b.查询指定的字段
需求:查询编号指定的学生姓名
select id,name from demo;
c.查询的时候指定别名
需求:查询编号对应的学生姓名,并且指定别名
select id as '编号',name as '姓名' from demo;
as可以省略
select id '编号',name '姓名' from demo;
d.查询数据的时候添加常量列
查询的时候动态添加的指定列
需求 查询id 别名 编号 name 姓名 添加到一个常量列’班级’,职位’Java就业班’
select id as '编号' ,name as '姓名','Java就业班'as '班级'from demo;
e.查询时合并列
需求:查询学生姓名对应的总成绩
select name as '姓名',(mysql+servlet) as '总成绩' from student ;

注意事项:合并列的时候,两个列的字段类型一致,如果字段类型不一致,那么就没有效果.如下两个字段类型不一致。
select name as ‘姓名’,(mysql+name) as ‘总成绩’ from demo;

2.where条件查询

=、!=、<>、<、<=、>、>=;
BETWEEN … AND; 在什么范围内
IN(SET);
IS NULL?; 为空
IS NOT NULL;不为空
AND; 并且
OR; 或者
NOT; 非

3.模糊查询like

a.匹配单个任意字符串
_ :匹配单个任意字符串
例: 我要查询姓名是3个任意字符组成的
select * from student sname like='___';
例:我要查询第二个字符是m的
select * from student where sanme like '_m%';

b.匹配多个任意字符串
%:匹配多个任意字符串
例:我要查询名字中包含m的名字的学生
select *from demo where name like '%m%';

4.字段控制

a.修改字段的别名:AS (可以省略)
i.给字段起别名:
select name as 姓名,age as 年龄 from demo;
ii.给运算字段起别名:
select name as 姓名,(工资+奖金)as 总收入 from demo;
iii.给表起别名:
select demo.name,demo.age from demo as other;

b.字段运算
null参与运算结果都为null;
一般会让null替换为0;

c.去重复记录
DISTINCT
select distinct age from demo;

d.排序
order by默认升序排列
ACS 升序
DESC 降序
select *from demo order by age ASC;
select *from demo order by age desc,id desc;

5.聚合函数

聚合函数是用来做纵向运算的函数
a.COUNT():
统计指定列不为NULL的记录行数; 统计个数的
select count(*) from demo;
b.MAX():
计算指定列的最大值,如果指定列是字符串类型,那么使用字符串排序运算;
select max(age) as 年龄最大 from student;
c.MIN():
计算指定列的最小值,如果指定列是字符串类型,那么使用字符串排序运算;
select max(age) as 年龄最小 from student;
d.SUM():
计算指定列的数值和,如果指 定列类型不是数值类型,那么计算结果为0;
select SUM(age) as 年龄之和 from student;
e.AVG():
计算指定列的平均值,如果指定列类型不是数值类型,那么计算结果为0;
select AVG(age) as 平均年龄 from student;

6.分组查询

group by 一般配合聚合函数使用,查出的数据才有意义
查询的字段:
分组字段本身
聚合函数
例如先按照部门编号,然年求每个部门的平均工资,这样展示出来的数据就应该有三条。
select 部门编号,AVG(工资) from emp group by 部门编号;
查询每个部门的部门编号
需求:每个部门工资大于1500的人数、
select 部门编号,COUNT(*) from emp where 工资>1500 group by 部门编号
注意:where 是对分组前的条件进行限定,也就是说不满足条件的不参与分组!

(问题)where和having的区别?

  • where:在分组前对条件进行限定。不满足条件,就不会参与分组
  • having:在分组之后,对结果集进行筛选。
7.分页查询

limit
limit 0,5 开始的记录索引, 每一页显示的条数 索引从0开始
开始的记录索引 = (页码-1)*每一页显示的条数

例如 我显示第一页 每页5条记录
select * from student limit 0,5 ; 这是第一页 5 条记录
select * from student limit 5,5 ; 这是第二页 5条记录
select * from student limit 10,5; 这是第三页 5条记录


数据的约束

1.作用:

为了保证数据的有效性和完整性

2.MySQL中常用的约束:

主键约束:primary key
外键约束:foreign key
唯一约束:unnique
非空约束:not null

3.主键约束:被修饰过的字段唯一非空

注意:一张表只能有一个主键,这个主键可以包含多个字段
主键约束建立的方式
a.方式1:建表的同时添加约束
格式:字段名称 字段类型 primary key;
b.方式2:建立表的同时在约束区域(有的字段声明完成之后就是约束区域了)添加约束
格式:primary key(字段1 ,字段2 ,…);
c.方式3:建表之后,通过修改表结构添加约束
格式:alter table demo add primary key (字段1,字段2,…);

4.唯一约束:(了解)

被修饰过的字段唯一,对null不起作用
唯一约束建立的方式:
a.方式1:建表的同时添加约束 格式: 字段名称 字段类型 unique

create table un(
id int unique,
username varchar(20)unique
);

b.方式2:建表的同时在约束区域添加约束
unique(字段1,字段值2...)
c.方式3:建表之后,通过修改表结构添加约束
alter table 表名add unique(字段1,字段2);-- 添加的联合唯一
alter table 表名add unique(字段1);-- 给一个添加唯一
alter table 表名add unique(字段2);-- 给另一个添加唯一

5.非空约束(了解)

特点:被修饰过的字段非空
非空约束建立方式:

create table nn(
id intnot null,
username varchar(20)not null
);

insert into nn values(null,’tom’);– 错误的 Column ‘id’ cannot be null

  • 7
    点赞
  • 41
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值