数据库,sql方言 您所在的位置:网站首页 idea未配置sql方言 数据库,sql方言

数据库,sql方言

2023-09-12 16:10| 来源: 网络整理| 查看: 265

一 数据库介绍 1 什么是数据库

存储数据的仓库,本质上就是存储数据的文件系统(在磁盘上),方便我们管理数据。

之前存储数据的方式有:io(操作麻烦,但是可以持久化)和集合(操作简单,但是不能持久化)

所有我们要学数据库(可以持久化,操作方便)

2 数据库管理系统

数据库管理系统(DataBase Management System,DBMS):指一种操作和管理数据库的大型软件。

数据库管理系统和数据库的关系 就类似于 wps或者excel和表格的关系

3 实体和表关系

类–>表

字段–>列(字段)

对象–>行(记录)

电脑上安装了DBMS之后,可以创建多个数据库.一个项目对应一个数据库,一个数据库下会有多张表

4 常见关系型数据库 1. MYSQL:开源免费的数据库,小型的数据库.已经被Oracle收购了.MySQL6.x版本也开始收费。 2. Oracle:收费的大型数据库,Oracle公司的产品。Oracle收购SUN公司,收购MYSQL。 3. DB2:IBM公司的数据库产品,收费的。常应用在银行系统中。 4. SQLServer:MicroSoft 公司收费的中型的数据库。C#、.net等语言常使用。 5. SyBase:已经淡出历史舞台。提供了一个非常专业数据建模的工具PowerDesigner。 6. SQLite: 嵌入式的小型数据库,应用在手机端。

常见的数据库:

mysqloracledb2 二 SQL 1 什么是SQL

Structured Query Language 结构查询语言

通过sql语句就可以操作数据库了

2 SQL方言

SQL是一套标准,所有的数据库厂商都实现了此标准;但是各自厂商在此标准上增加了特有的语句,这部分内容我们称为方言。 各个数据库的分页操作就是使用方言.

3 SQL书写规范 1.sql的一条语句可以在一行上编写,中间也可以换行 2.sql语句的结束符是; 3.sql语句关键词不区分大小写 4 SQL分类 DDL 数据定义语言 操作的对象主要是数据库和表主要的关键词: create alter drop DML 数据操作语言 ★ 操作的对象主要是记录主要的关键词: insert update delete DQL 数据查询语言,不是官方定义,是程序员定义的.★ 操作的对象就是记录主要的关键词: select DCL 数据控制语言 (了解),一般是DBA(数据库管理员)操作 操作的对象主要是 用户和权限主要的关键词: create drop grant(授权) revoke(撤销权限) TCL 事务控制语言 (理解) 操作的对象是事务主要的关键词: commit(提交事务) rollback(回滚) 四 DDL 1 操作数据库 创建数据库(掌握) -- 最最常用的方式 create database 数据库名字; -- 例如: create database day01; -- 了解的方式,当数据库不存在的时候才创建 create dababase if not exists 数据库名; -- 了解的方式,创建数据库的时候,指定字符集 create database 数据库名 character set gbk; 修改数据库(了解) -- 修改数据库的字符集 alter database 数据库名字 character set 新的字符集; -- 例如: alter database day03 character set utf8; 删除数据库(理解) -- 格式: drop database 数据库名字; -- 例如: drop database day03; 其他的命令 -- 查看某个数据库的建库语句: show create database 数据库名; -- 查看全部数据库: show databases; -- 使用或者切换数据库 : use 数据库名字; -- 查看当前工作在那个数据库下 : select database(); 2 操作表

前提:在指定数据库中进行操作

创建表(掌握) -- 格式: create table 表名( 字段1名字 字段1数据类型, 字段2名字 字段2数据类型 ); -- 例如: create table user( id int, name varchar(8) ); -- 创建一张和user表结构一模一样的表 create table 新表名 like 表名; -- 例如 : create table user1 like user; 修改表(理解中的了解) -- 格式: alter table 表名 操作 -- 往表中添加字段 column可以省略不写 添加一个password字段 alter table user add column password int; -- 修改表中字段的类型 将password的类型修改为varchar alter table user modify password varchar(8); -- 修改表中字段的名字 将password 修改为 pwd alter table user change password pwd varchar(8); -- 删除字段 删除pwd字段 alter table user drop pwd; -- 修改表名 将user1改名为user11 alter table user1 rename to user11; 删除表(理解) -- 格式 drop table 表名; -- 例如: drop table user11; 其他的命令 -- 查看当前库下所有的表 : show tables; -- 查询某个表的建表语句 : show create table 表名; -- 查看表结构(描述表) : desc 表名;

常用的数据类型

intvarchar(n) 可变长度字符串,n是最大的长度 若存入的数据没有超过n的时候,是几个字符就占多大的空间若存入的数据超过n的时候,在cmd窗口下就会报错 char(n) 固定长度字符串,n就是长度 若存入的数据没有超过n的时候,就是n个字符空间若存入的数据超过n的时候,在cmd窗口下就会报错 double或者double(m,n) 小数 m:总位数n:小数位数例如: double(5,2) 表示存入的数据最大值为 999.99 date 日期 1985-11-11datetime 日期时间 1985-11-11 14:30:59timestamp 时间戳 若使用了时间戳且设置了默认值的话,我们若不给改字段赋值的时候就会使用系统当前时间text 文本 (了解)blob 二进制 (了解) 五 DML

主要操作对象:记录

添加记录 -- 格式1:给指定的字段赋值 insert into 表名 (字段1,字段2) values (值1,值2); -- 格式2:给全部字段赋值 insert into 表名 values(值1,值2,...值n); 注意事项: 1.给指定字段赋值的时候,前面括号中有几个字段,后面括号中就有几个值 .且数据类型也要对应上 2.给全部字段赋值的时候,value中值的顺序要和表结构中的字段的顺序一致.且数据类型也要对应上 3.插入数据的时候应该使用引号将值引起来.建议使用'' ,若值的类型为数字的话,引号可以省略不写. -- 先给user表添加字段 alter table user add money double(5,2); alter table user add sex varchar(1); alter table user add birthday date; -- 插入值 insert into user(id,name) values('1','tom'); insert into user values (2,'jack',900,'男','1999-12-12'); -- 常见错误 insert into user values(4,jerry,'100','男','1990-09-09'); insert into user values(4,'jerry','100','男'); insert into user (id,name,sex) values(4,'jerry','男人'); insert into user (id,name,money) values(4,'jerry',1000); insert into user (id,name) values ('jerry',4); insert into user(id,name) valua(4,'jerry'); 修改记录 -- 格式1:修改全部记录 update 表名 set 字段1=值1,字段2=值2 ; -- 格式2:按条件修改记录 update 表名 set 字段1=值1,字段2=值2 where 条件语句; -- 例如: update user set sex='女',birthday='2000-01-01'; update user set sex='男',birthday='1999-12-31' where id = 2; 删除记录 -- 格式1:删除全部记录 delete from 表名; -- 格式2:删除满足条件的记录 delete from 表名 where 条件语句; -- 例如: -- 创建一张和user结构一模一样的表user1,然后将user表中的记录插入到新的表中 create table user1 like user; insert into user1 select * from user;-- 蠕虫复制 -- 清空user1表中的记录 delete from user1; -- 删除user表中id=1的记录 delete from user where id = 1; 七 DQL 1 基本查询 -- 基本查询格式 select * from 表名;-- 查询全部的字段 select 字段1,字段2 from 表名;-- 查询指定的字段 -- 数据准备 -- 创建表 create table stu( id int, name varchar(20), chinese double, english double, math double ); -- 插入记录 insert into stu(id,name,chinese,english,math) values(1,'tom',89,78,90); insert into stu(id,name,chinese,english,math) values(2,'jack',67,98,56); insert into stu(id,name,chinese,english,math) values(3,'jerry',87,78,77); insert into stu(id,name,chinese,english,math) values(4,'lucy',88,NULL,90); insert into stu(id,name,chinese,english,math) values(5,'james',82,84,77); insert into stu(id,name,chinese,english,math) values(6,'jack',55,85,45); insert into stu(id,name,chinese,english,math) values(7,'tom',89,65,30); -- 查询表中所有学生的信息 -- 查询表中所有学生的姓名和对应的语文成绩 -- 查询表中学生姓名(去重) -- 在查询的所有学生数学分数上加10分特长分 -- 统计每个学生的总分 -- 使用别名表示学生总分 -- 查询表中所有学生的信息 SELECT * FROM stu; -- 查询表中所有学生的姓名和对应的语文成绩 SELECT NAME,chinese FROM stu; -- 查询表中学生姓名(去重) -- 使用distinct去掉重复 -- select distinct 字段,字段 from 表名;当distinct后面所有的字段值都一样的才会去掉重复值 SELECT DISTINCT NAME FROM stu;-- 5条 SELECT DISTINCT NAME,chinese FROM stu;-- 6条 -- 在查询的所有学生数学分数上加10分特长分 -- 我们可以在查询的结果上进行运算,不影响原来数据 SELECT NAME,math,math+10 FROM stu; -- 统计每个学生的总分 -- null和其他数据进行运算的时候结果还是null SELECT NAME,chinese+math+english FROM stu; -- 我们可以使用ifnull函数进行处理 -- ifnull(表达式1,表达式2) 当表达式1的结果为null时,按表达式2的结果处理 SELECT NAME,chinese+math+IFNULL(english,0) FROM stu; -- 使用别名表示学生总分 -- 给查询的字段起别名 -- 格式 : 显示的字段名 [as] 别名 SELECT NAME,chinese+math+IFNULL(english,0) AS 总分 FROM stu; SELECT NAME,chinese+math+IFNULL(english,0) '总 分' FROM stu; SELECT NAME,chinese+math+IFNULL(english,0) "总 分" FROM stu; SELECT NAME,chinese+math+IFNULL(english,0) `总 分` FROM stu; 2 条件查询 -- 基本格式 select *|字段 from 表名 where 条件语句; 条件语句支持:关系运算符,逻辑运算符,模糊查询等. -- 数据准备 CREATE TABLE student ( id int, name varchar(20), age int, sex varchar(5), address varchar(100), math int, english int ); -- 插入记录 INSERT INTO student(id,NAME,age,sex,address,math,english) VALUES (1,'马云',55,'男','杭州',66,78), (2,'马化腾',45,'女','深圳',98,87), (3,'马景涛',55,'男','香港',56,77), (4,'柳岩',20,'女','湖南',76,65), (5,'柳青',20,'男','湖南',86,NULL), (6,'刘德华',57,'男','香港',99,99), (7,'马德',22,'女','香港',99,99), (8,'德玛西亚',18,'男','南京',56,65); # 关系运算符 -- 查询math分数大于80分的学生 -- 查询english分数小于或等于80分的学生 -- 查询age等于20岁的学生 -- 查询age不等于20岁的学生 # 关系运算符 > < >= 80; -- 查询english分数小于或等于80分的学生 SELECT * FROM student WHERE english 35 AND sex = '男'; SELECT * FROM student WHERE age > 35 && sex = '男'; -- 查询age大于35或性别为男的学生(两个条件其中一个满足) SELECT * FROM student WHERE age > 35 OR sex = '男'; -- 查询id是1或3或5的学生 SELECT * FROM student WHERE id = 1 OR id = 3 OR id = 5; -- 使用in关键字再次查询id是1或3或5的学生 -- 格式: 字段名 in (值1,值2) SELECT * FROM student WHERE id IN (1,3,5); -- 查询id不是 1或3或5的学生 SELECT * FROM student WHERE id != 1 AND id !=3 AND id != 5; SELECT * FROM student WHERE id NOT IN (1,3,5); -- 查询english成绩大于等于77,且小于等于87的学生 SELECT * FROM student WHERE english >= 77 AND english 40; -- 查询数学成绩总分 SELECT SUM(math) FROM student; -- 查询数学成绩平均分 SELECT AVG(math) FROM student; -- 查询数学成绩最高分 SELECT MAX(math) FROM student; -- 查询数学成绩最低分 SELECT MIN(math) FROM student; 5 分组 -- 格式 select 分组的字段,聚合函数,聚合函数2 from 表名 [where 分组前的筛选条件] group by 分组字段 [having 分组后的条件筛选] -- 查询男女各多少人 -- 查询年龄大于25岁的人,按性别分组,统计每组的人数 -- 查询年龄大于25岁的人,按性别分组,统计每组的人数,并只显示性别人数大于2的数据 -- 查询男女各多少人 SELECT COUNT(1) FROM student WHERE sex = '男'; SELECT COUNT(1) FROM student WHERE sex = '女'; SELECT sex,COUNT(1) FROM student GROUP BY sex; -- 查询年龄大于25岁的人,按性别分组,统计每组的人数 SELECT sex, COUNT(1) FROM student WHERE age > 25 GROUP BY sex; -- 查询年龄大于25岁的人,按性别分组,统计每组的人数,并只显示性别人数大于2的数据 SELECT sex, COUNT(1) FROM student WHERE age > 25 GROUP BY sex HAVING COUNT(1)>2 SELECT sex, COUNT(1) renshu FROM student WHERE age > 25 GROUP BY sex HAVING renshu>2

where和having区别

where 是对分组前的数据进行筛选,having是对分组后的数据进行筛选where后面不能使用聚合函数,having后面可以使用聚合函数 6 分页

mysql中是通过limit关键字实现的.mysql的方言

格式:

select * | 字段 from 表 [where 条件][group by 字段] [order by 排序字段] limit m,n

m : 开始的索引n : 向后查询的条数 -- 数据准备 INSERT INTO student(id,NAME,age,sex,address,math,english) VALUES (9,'唐僧',25,'男','长安',87,78), (10,'孙悟空',18,'男','花果山',100,66), (11,'猪八戒',22,'男','高老庄',58,78), (12,'沙僧',50,'男','流沙河',77,88), (13,'白骨精',22,'女','白虎岭',66,66), (14,'蜘蛛精',23,'女','盘丝洞',88,88); -- 查询学生表中数据,从第三条开始显示,显示6条 -- 查询学生表中数据,显示前6条 -- 模拟百度分页,一页显示5条 -- 查询学生表中数据,从第三条开始显示,显示6条 SELECT * FROM student LIMIT 2,6; -- 查询学生表中数据,显示前6条 SELECT * FROM student LIMIT 0,6; SELECT * FROM student LIMIT 6; -- 模拟百度分页,一页显示5条 SELECT * FROM student LIMIT 0,5; SELECT * FROM student LIMIT 5,5; SELECT * FROM student LIMIT 10,5;

开始的索引的规律:

(页码-1)*每页显示的条数 八 数据库约束 1 概述

作用

对表中的数据进行限定,保证数据的正确性、有效性和完整性。

约束有哪些:

★主键约束:一条记录的唯一标识唯一约束:字段在该列中唯一非空约束:字段不能为null外键约束:多表关系才用默认值:在不具体指定数据的时候使用的值就是默认值 2 实现 主键约束

作用:限定某一列的值非空且唯一, 主键就是表中记录的唯一标识。

一张表中只能有一个主键.但是主键可以修饰多个字段.

主键的分类:

自然主键:使用实体中一个有具体业务含义的字段作为主键.例如:身份证号,手机号代理主键:使用实体中没有具体业务含义的字段作为主键.一般会在每张表中引入一个id字段作为主键.

方式1:在建表的时候,在字段名后面通过primary key 声明

方式2:在建表的时候,在约束区域通过primary key 声明

方式3:通过修改表结构,添加主键约束

方式1:在建表的时候,在字段名后面通过primary key 声明

create table pk1( id int primary key, name varchar(8) ); insert into pk1 values(1,'tom');-- 成功 insert into pk1 values(1,'tom');-- 重复输入1 错误 Duplicate entry '1' for key 'PRIMARY' insert into pk1 values(null,'tom');-- 不能为空 错误 Column 'id' cannot be null

方式2:在建表的时候,在约束区域通过primary key 声明

create table pk2( id int, name varchar(8), primary key(id) );

方式3:通过修改表结构,添加主键约束

create table pk3( id int, name varchar(8) ); alter table pk3 add primary key (id);

扩展:用name和sex作为主键

create table pk4( id int, name varchar(8), sex varchar(1), primary key(name,sex) -- 联合主键 也可以使用方式3添加主键 ); insert into pk4 values (1,'tom','男');-- 成功 insert into pk4 values (1,'tom','男');-- 失败 insert into pk4 values (1,'tom','女');-- 成功 insert into pk4 values (1,null,'女');-- 失败

小结:以后建表的时候务必给表加上主键.

唯一约束

作用:限定某一列中的值不能重复,对null不其作用

方式1:在建表的时候,在字段名后面通过unique 声明

方式2:在建表的时候,在约束区域通过unique 声明

方式3:通过修改表结构,添加unique 约束

方式1:在建表的时候,在字段名后面通过unique 声明

create table un1( id int, username varchar(8) unique ); insert into un1 values(1,'tom');-- 成功 insert into un1 values(1,'tom');-- 失败 insert into un1 values(1,null);-- 成功

方式2:在建表的时候,在约束区域通过unique 声明

create table un2( id int, username varchar(8), unique(username) );

方式3:通过修改表结构,添加unique 约束

create table un3( id int, username varchar(8) ); alter table un3 add unique(username);

小结:唯一约束也可以使用java代码保证数据的唯一性.

非空约束

作用:限定某一列的值不能为null

方式:在建表的时候,在字段名后面通过not null声明

create table nn( id int, username varchar(8) not null ); insert into nn values(1,null);-- 失败 默认值

作用:限定某一列的默认值,再没有指定的情况下所有列的默认值为null

格式 : 字段名 字段类型 default ‘默认值’

当我们给表中插入或者修改数据的时候,若没有明确给字段设置值,就会使用默认值

create table person( id int, name varchar(8), country varchar(64) default '中国' ); insert into person values(1,'韩梅梅',null); insert into person(id,name) values(2,'李雷');

扩展 : 时间戳,timestamp,在添加或者修改的时候若没有给设置值,就让其使用系统的当前时间

ALTER TABLE person ADD update_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP


【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

      专题文章
        CopyRight 2018-2019 实验室设备网 版权所有