学习大数据,需要的SQL基础(1)

文章目录

SQL语句

1.介绍:操作数据库的语言,所有关系型数据库的语句标准,是一种语法规则

2.但是不同的关系型数据库语法再遵守sql语句的前提下,也有个别不用的语法,这一类不同的语法,也叫做数据库方言

数据库语言分类

数据定义语言:简称DDL(Data Definition Language),用来定义数据库对象:数据库,表,列等。关键字:create,alter,drop等

数据库操作语言:简称DML(Data Manipulation Language),用来对数据库中的记录进行操作,关键字:insert,delete,update等

数据库控制语言:简称DCL(Data Control Language),用来定义数据库中的访问权限和安全级别,及创建用户

数据库查询语言:简称DQL(Data Query Language),用来查询数据库中表的记录,关键字:select,from,where等

SQL语句的通用语法

SQL语句可以单行或多行书写,以分号结尾

可使用空格和缩进来增强语句的可读性:基本上一个单词就是一个空格

MySQL数据库的SQL语句不去分大小写,关键字建议使用大写

例如:SELECT * FROM user

同样可以使用/* */的方式i完成注释

还可以使用井号##

sql中的数据类型

类型名称 说明
int 整数长度 整数类型
double 小数类型
decimal 指定整数位与小数位长度的小数类型
date 日期类型 格式为yyyy-MM-dd,包括年月日,不包括时分秒
datetime 日期类型,格式为yyyy-MM-DD HH:MM:SS,包括年月日时分秒
timestamp 日期类型,时间戳 从1970到2024
varchar(字符串长度) 文本类型,M为0-65535之间的整数

MySQL中的语句

DDL之数据库操作 database

创建数据库

关键字: create database

语法:create database 数据库名字 charset utf8

在创建数据库时建议用`包裹

列名也可以用`包裹

注意:

1.mysql默认编码,拉丁文latin-1,所以说创建数据库的时候,指定utf8

2.如果创建数据库的时候忘记夹utf8了,可以后改

3.在写sql语句的时候,如果库名,表名,列名和sql语句的关键字冲突了,可以用``包裹

查看数据库

语法 show databases

删除数据库

语法 drop database 数据库名;

sql 复制代码
drop database sys;

使用数据库(切换数据库)

1.语法:

use 数据库名;

sql 复制代码
use sys;

DDL之表操作 ---- table

创建表

1.关键字 create table

2.语法:

create table 表名(

列名 数据类型(长度)[约束],

列名 数据类型(长度)[约束]

列名 数据类型(长度)[约束]

)

sql 复制代码
CREATE TABLE category1(
	uid INT,
	uname VARCHAR(10)
 );

3.注意:

定义列和列的时候,用逗号

如果是最后一列,不要用逗号

查看表

查看所有表

show tables;

查看表结构

desc 表名;

sql 复制代码
show tables;
DESC category;

删除表

1.关键字 drop table

2.语法:

drop table 表名

sql 复制代码
DROP TABLE category;

修改表结构

1.添加列

alter table 表名 add 列名 类型(长度) [约束];

sql 复制代码
ALTER TABLE category add count int;

2.修改列的类型,长度以及约束

alter table 表名 modify 列名 类型(长度)[约束];

sql 复制代码
ALTER TABLE category modify count varchar(100);

3.修改列名

alter table 表名 change 旧列名 新列名 类型(长度) [约束];

sql 复制代码
ALTER TABLE category CHANGE count counts VARCHAR(12);

4.修改表名

rename table 表名 to 新表名;

sql 复制代码
RENAME table category to categories;

5.修改表删除列

alter table 表名 drop 列名

sql 复制代码
ALTER table categories drop counts;

DML之数据操作语言

插入数据

1.关键字: insert into

2.语法:

a.insert into 表名(列名,列名) value (值,值)

b.insert into 表名(列名,列名) value (值,值),(值,值),(值,值),(值,值); 批量添加

c.insert into category values (值,值); -------- 如果省略列名,那么在存值时需要将所有列的值都写上

在操作数据的时候,如果时varchar类型的,建议用单引号

原因:将来我们需要用java 代码中的API去操作sql语句,而在Java中写的sql语句时字符串的

String sql = "INSERT INTO category(cid,cname) VALUES (1,"布偶")"; ---- 双引号不明确

String sql = "INSERT INTO category(cid,cname) VALUES (1,'布偶')"; ---- 推荐

sql 复制代码
INSERT INTO categories(cid,cname) VALUES(1,'布偶');
INSERT INTO categories(cid,cname) VALUES(2,'蓝猫');
INSERT INTO categories(cid,cname) VALUES(3,'英短'),(4,'梨花');
INSERT INTO categories VALUES(5,'奶牛');

删除数据

1.关键字:delete from where

2.语法:

a.delete from 表名 ---- 一次全删除

b.delete from 表名 where 条件 ------ 根据条件删除

Java与mysql符号的对应

java mysql
== =
> >
< <
>= >=
<= <=
!= != 或者 <>
以下时代码的相关演示
sql 复制代码
##删除cid的记录
DELETE FROM categories WHERE cid = 1; 

##删除cid>=5的记录
DELETE FROM categories WHERE cid >= 5;

## 删除出cid不等于1的记录
DELETE FROM categories WHERE cid != 3;
DELETE FROM categories WHERE cid <> 3;
DELETE FROM categories WHERE NOT(cid=3);

修改数据

1.关键字:update set

2.语法:

a.update 表名 set 列名 = 新值 --- 全部都改成指定的新值

b.update 表名 set 列名 = 新值 --- where 条件

sql 复制代码
##将cname都改成s手机
UPDATE categories SET cname = '手机';

##将表中手机改成金渐层
UPDATE categories SET cname = '金渐层' WHERE cname = '手机';
##将cid为2的数据改成银渐层
UPDATE categories SET cname = '银渐层' WHERE cid = 2 ;
##将cid不等于1的cname都改成布偶
UPDATE categories SET cname = '布偶' where cid <>1;

约束

约束:主要是约束指定列的数据

主键约束

1.关键字 primary key

2.特点:

a.主键列的数据唯一不能重复

b.不能为NULL

c.每个表中都应该有一个主键,此列的数据能带包一行数据,相当于人的身份证号

添加方式1:在创建表时,在字段后面直接指定(重点)

在创建表的过程中,在列后面直接写约束

sql 复制代码
CREATE TABLE cats(
	cid INT PRIMARY KEY,
	cname VARCHAR(20)
)

添加方式2:在constraint约束区域,去指定主键约束

1.什么叫做constraint域

在最后一列和右半个小括号之间

2.语法

[constraint 名字] primary key(字段名)

3.注意:[constraint 名字] 可写可不写

sql 复制代码
CREATE TABLE dogs(
	cid INT,
	cname VARCHAR(20),
	PRIMARY KEY(cid)
);

添加方式3:通过修改表结构的方式

1.格式: ALTER TABLE 表名 ADD [CONSTRAINT 名称] PRIMARY KEY (字段列表)

2.注意:[CONSTRAINT 名称] 可以省略不写

sql 复制代码
ALTER TABLE category1 ADD PRIMARY KEY(uid);

联合主键

1.什么叫做联合主键:

多个列合称为一个主键

2.特点:

多个列中不能有完全重复的数据

不能为NULL

删除主键约束

ALTER TABLE 表名 DROP PRIMARY KEY ---- 删除主键约束

sql 复制代码
ALTER TABLE category1 ADD PRIMARY KEY(uid);

自增长约束

基本操作

1.关键字:auto_increment 一般情况下和主键结合使用

2.特点

自增长约束修的列,数据不用我们自己维护,mysq会自动维护

3.自增长约束和主键约束区别:

a.相同点:

此列中的数据唯一

b.不同点:

一个表只能有一个主键,可以代表一条数据

一个表可以有多个自增长列,不能代表一条数据

sql 复制代码
INSERT INTO dogs VALUES(1,'边牧');
INSERT INTO dogs VALUES(NULL,'金毛');
INSERT INTO dogs(cname) VALUES('泰迪');

注意:

如果不写列名,我们存数据的时候要一一对应,将所有要存的数据都写上

删除数据,如果此列为自增长列,删除之后,列号不会重新编写,会继续从被删除的那列序号往后编写

摧毁表结构

TRUNCATE TABLE 表名;

自增长是一个约束,操作起来和其他约束不太一样

如果自增长约束和主键约束合起来使用想删除,需先删除自增长约束,在删除主键约束

sql 复制代码
ALTER TABLE dogs MODIFY cid int;
ALTER TABLE dogs DROP PRIMARY KEY;

truncate和delete的区别

1.truncate:清空数据,摧毁表结构,自增长列会重新标号

2.delete:删除表数据,不会摧毁表结构,自增长列不会重写编号,他会继续往下编

非空约束

1.关键字:NOT NULL

2.特点:

被NOT NULL 修饰的列不能为空

建表

sql 复制代码
CREATE TABLE product(
	pid INT PRIMARY KEY AUTO_INCREMENT,
	pname VARCHAR(20) NOT NULL,
	price INT
);

插入数据

sql 复制代码
INSERT INTO product(pname,price) VALUES('键盘',300);
##相当于String s = ""
INSERT INTO product(pname,price) VALUES('',300);
##相当于 String s = NULL,报错
INSERT INTO product(pname,price) VALUES(NULL,300);

唯一约束

1.关键字:UNIQUE

2.特点:

被UNIQUE约束的列,数据要唯一,不能重复

3.注意:

唯一约束不能当主键使用,一个表中可有多个列为唯一约束

sql 复制代码
INSERT INTO cats(pname,price) VALUES('布偶',4000);
##报错
INSERT INTO cats(pname,price) VALUES('布偶',4000);

删除唯一约束

ALTER TABLE person DTOP INDEX 名称 [名称时CONSTRAINT后面的名字]

sql 复制代码
ALTER TABLE cats DROP INDEX pname; 

简单查询

数据准备

创建商品表

sql 复制代码
CREATE TABLE product(
	pid INT PRIMARY KEY,
	pname VARCHAR(20),
	price DOUBLE
);

简答查询

1.关键字:select from where

2.语法:

a.select * from 表名 --- 查询所有数据,展示所有列

b.select 列名,列名 from 表名 ---- 查询所有,展示所指定的列

c.select 列名 from 表名 where 条件 ----- 根据条件查询,显示指定列的数据

3.注意:

a.查询之后,想展示哪些列的数据,就在select后面写那些列的列名

b,查询出来结国也是一张表,但是伪表,此表是只读的

sql 复制代码
SELECT * FROM product;
SELECT pid,pname FROM product;
## 可以给表或者列起别名
SELECT pid '商品id', pname '商品名字' FROM product;

去重复值 关键字: distinct(列名)

sql 复制代码
SELECT DISTINCT(price) FROM product;

给列中的数据做计算

sql 复制代码
SELECT pname,(price + 100) 'newprice' FROM product;

条件查询

比较运算符 < <= >= = <> 大于、小于、大于(小于)等于、不等于
BETWEEN ...AND... 显示在某一区间的值(含头含尾)
字段 IN(set) 显示在in列表中的值,例:price in(100,200) 查询id为1,3,7的商品: id in(1,3,7)
列名 LIKE '张pattern' 模糊查询,Like语句中,% 代表零个或多个任意字符,_ 代表一个字符, 例如:first_name like '_a%'; 比如:查询姓张的人:name like '张%' 查询商品名中带香的商品: pname like '%香%' 查询第二个字为想的商品: like '想%' 查询商品名为四个字的商品:like '___'
IS NULL 判断是否为空
逻辑运行符 and (与) 多个条件同时成立 全为true,整体才为true
or(或) 多个条件任一成立 有真则真
not(非) 不成立,例:where not(salary>100);

相关查询语句

sql 复制代码
SELECT * FROM product WHERE pname = '花花公子';
SELECT * FROM product WHERE price = 800;
SELECT * FROM product WHERE price > 60;
SELECT * FROM product WHERE price BETWEEN 200 AND 600;
SELECT * FROM product WHERE price = 200 or price = 600;
SELECT * FROM product WHERE price IN (200,600);
##查询以香字开头的商品
SELECT * FROM product WHERE pname LIKE '香%'
##查询含有霸的商品
SELECT * FROM product WHERE pname LIKE '%霸%'
##查询商品名为null的
SELECT * FROM product WHERE pname IS NULL;
SELECT * FROM product WHERE pname IS NOT NULL;

排序查询

1.关键字:order by

2.语法:

select 列名 from 表名 order by 排序字段 asc|desc ---- 查询之后要指明那一列进行排序

asc 升序 默认

desc 降序

3.注意:先查询,后排序

书写sql语句关键字的顺序

select

from

where

group by

having

order by

执行顺序

from

where

group by

having

select

order by

先定位到要查询哪个表,然后根据什么条件去查,表确定好了,条件也确定好了,开始利用select查询,查询得出一个结果,在针对这个结果进行一个排序

sql 复制代码
##对价格进行降序排序
SELECT * FROM product ORDER BY price DESC;
##对价格进行升序排序
SELECT * FROM product ORDER BY price ASC;
SELECT DISTINCT(price) FROM product ORDER BY price ASC;
相关推荐
毕设木哥35 分钟前
计算机专业毕业设计推荐-基于python的汽车汽修保养服务平台
大数据·python·计算机·django·汽车·毕业设计·课程设计
lupai2 小时前
盘点实用的几款汽车类接口?
大数据·人工智能·汽车
linly12193 小时前
python学习笔记目录
笔记·学习
金智维科技官方3 小时前
高效财税自动化软件的特点与优势
大数据·人工智能·自动化·rpa
kejijianwen3 小时前
BOE(京东方)携多场景物联网创新应用亮相2024服贸会 “屏之物联”赋能数字经济
大数据·人工智能·物联网
LvManBa3 小时前
Vue学习记录之四(computed的用法)
前端·vue.js·学习
惜.己3 小时前
MyBatis中一对多关系的两种处理方法
java·开发语言·后端·sql·mysql·mybatis·idea
终末圆3 小时前
MyBatis动态SQL中的`if`标签使用【后端 19】
java·数据结构·数据库·sql·算法·spring·mybatis
Li小李同学Li4 小时前
git学习【持续更新中。。。】
git·学习·elasticsearch
·云扬·5 小时前
Shiro框架
笔记·学习·java-ee