您的位置:首页 > 数据库 > MySQL

【MySQL笔记】SQL基本语法

2017-09-26 10:45 465 查看

一.数据库的引入

1.数据的存储:

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

2.JavaSE->IO 流程对数据进行读写,执行效率低。

3.数据库的软件:

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

4.常见数据库软件:

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

5.mySQL的安装和卸载

二.SQL:结构化查询语言

1.概念:

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

2.sql分类:

DDL(Data Definition Language):数据定义语言,用来定义数据库对象:库、表、列等;
DML(Data Manipulation Language):数据操作语言,用来定义数据库记录(增、删、改)
DCL(Data Control Language):数据控制语言,用来定义访问权限和安全级别;
DQL(Data 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(每个字段的具体值)

eg: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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: