MySql语句基础

数据库:
概念:数据存储的仓库,用于存储和管理数据

常见数据库产品:Oracle、DB2、Mysql、Sql Server、Sqllite

SQL:结构化查询语言(Structured Query Language)简称SQL,是一种特殊目的的编程语言,是一种数据库查询和程序设计语言,用于存取数据以及查询、更新和管理关系数据库系统。

SQL,是操作关系型数据库的一个规范,所有的关系型数据库的操作,都要遵循此规范,当然允许各家数据库,存在差异,那么这些差异,称之为数据库的方言。

sql分类:
  • DDL(Data Definition Language):数据定义语言,用来定义数据库对象:库、表、列等;
  • DML(Data Manipulation Language):数据操作语言,用来定义数据库记录(增、删、改)
  • DCL(Data Control Language):数据控制语言,用来定义访问权限和安全级别;
  • DQL(Data Query Language):数据查询语言,用来查询记录(数据)。
sql基本语句:
创建数据库: create database mydemodb;

查看所有数据库: show databases;
删除数据库: drop database mydemodb;
查看建库语句:show create database mydemodb;

MySql中的数据类型
  • int:整型 id int,
  • double:浮点型,例如double(5,2)表示最多5位,其中必须有2位小数,即最大值为999.99;
  • char:固定长度字符串类型;eg:name char(10) “张三”
  • varchar:可变长度字符串类型;eg:name varchar(10) “张三”
  • text:字符串类型;存大格式的文本 比如存个小说 一般不用
  • blob:字节类型;存字节类型的数据 比如电影字节 图片字节 但是一般不会把字节数据存到数据库当中
  • date:日期类型,格式为:yyyy-MM-dd;
  • time:时间类型,格式为:hh:mm:ss
  • datetime:日期时间类型 yyyy-MM-dd hh:mm:ss
  • timestamp:时间戳类型 yyyy-MM-dd hh:mm:ss
建表语法:
create table 表名(
			列名1 类型1,
			列名2 类型2,
			...
			列名n 类型n
		);

eg:

create table student(
id int,
name varchar(10),
sal double(6,2),
birthday date
)

注:建表之前,需要选择库
建库:create database ***;
选择库:use ***;

删除表:

drop table student;

修改表名:

alter table 旧表名 rename to 新表名;

eg:

alter table student rename to stu;

增加一个字段

alter table student add(age int);

查看表结构

desc student;

删除一个字段

alter table student drop age;

修改字段名称 chang 旧字段名 新字段名 类型(长度)

alter table student change name username varchar(20);

修改字段的数据类型:

alter table student modify username char(24);

也可以使用change 既可以修改字段名称也可以修改字段类型:

alter table student change username username varchar(20);

插入数据,给所有字段插入值

insert into student(id,username,sal,birthday) values(1,'zhangsan',9999.99,'2020-10-10');

给全部字段添加值时,也可以简写:

insert into student values(3,'zhaoliu',9999.88,'2020-10-15');

给个别字段插入值

insert into student(id,username) values(2,'lisi');

删除表中的数据

delete from student;  -- 删除表中所有的数据,因为没有加条件。

有条件的进行删除 where 条件 =、!=、<>(不等于)、<、<=、>、>=;or and

delete from student where id=1;

or 或者的意思 || 这个运算符也可以

delete from student where id=2 or id=3;

and 并且的意思 或者用 && 这个运算符也可以

delete from student where username='zhangsan' and id=4;

修改表中的数据 update
不加的条件的修改

update student set id=1,birthday='2000-10-10';

根据条件来修改 where =、!=、<>(不等于)、<、<=、>、>=;or and

update student set id=2,birthday='2022-10-10' where id=1 and username='lisi';

查询表中的数据,查询表中所有数据

select * from student;

查询个别字段

SELECT empno,ename,job FROM emp;
条件查询:
条件查询:where 子句

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

注:null 用‘=’判断不出来。要判断null值用is null;不为null用is not null

给字段起别名,用于临时展示用 as as可以省略不写

SELECT empno,ename,job FROM emp;
SELECT empno AS 员工编号,ename AS 员工姓名,job 工作岗位 FROM emp;

对于数值型的字段,可以进行数学运算

SELECT empno,ename,job,sal FROM emp;
SELECT empno,ename,job,sal AS 月薪, sal*12 AS 年薪 FROM emp;

null值参与数学运算,结果也是null,我们想要把null当成0来处理

SELECT empno,ename,job,sal AS 月薪,comm AS 奖金, sal*12+IFNULL(comm,0) AS 年薪 FROM emp;

DISTINCT 去重

SELECT DISTINCT sal FROM emp WHERE sal=1250;

多个字段去重,把多个字段看做整体来去重

SELECT DISTINCT ename,sal FROM emp WHERE sal=1250;
排序 order by ASC 默认值 DESC 降序排列
默认就是升序排列:
SELECT * FROM emp ORDER BY sal;

默认就是升序排列:

SELECT * FROM emp ORDER BY sal ASC;

默认就是升序排列:

SELECT * FROM emp ORDER BY sal DESC;
模糊查询:like
* 通配符

_ 匹配单个任意字符
% 匹配多个任意字符

eg:
要查询第二个字符是m的:

select * from student where sanme like '_m%';

查询名字中包含m的:

select * from student where sname like '%m%';
字段控制:

1.修改字段的别名:AS (可以省略)
2.字段运算:null参与的运算,结果都为null
3.去除重复记录:例如查询工资是3000的 出现了多条工资为3000 的记录,但只想展示一条3000的记录,可以用 distinct 去除重复记录
eg:select distinct 工资 from student;
4.排序: order by:010升序排列,ASC 默认值,DESC 降序排列
eg:
按工资从小到大排

select * from student order by 工资 asc;

按工资从大到小排

select * from student order by 工资 desc 
聚合函数

聚合函数:做纵向运算的函数

  • COUNT():统计指定列不为NULL的记录行数;

eg:统计有多少个学生

select count(sid) from student;
  • MAX():计算指定列的最大值,如果指定列是字符串类型,那么使用字符串排序运算;
  • MIN():计算指定列的最小值,如果指定列是字符串类型,那么使用字符串排序运算;
  • SUM():计算指定列的数值和,如果指 定列类型不是数值类型,那么计算结果为0;
  • AVG():计算指定列的平均值,如果指定列类型不是数值类型,那么计算结果为0;

分组查询:group by:一般配合聚合函数使用,查出的数据才有意义
查询的字段:
1.分组字段本身
2.聚合函数

where和having的区别:

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

分页查询:limit

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

select * from student limit 0,5 ;  这是第一页 5 条记录
select * from student limit 5,5 ; 这是第二页 5条记录
select * from student limit 10,5 这是第三页 5条记录
约束:

意义:对字段的值,做出的一种规则上的限定,主要目的,为了数据的有效性和完整性。

  • 唯一约束 UNIQUE 特点:值不能重复,对null值不起作用
  • 非空约束 NOT NULL
  • 自增长约束 AUTO_INCREMENT
  • 非负约束 UNSIGNED
  • 外键约束 FOREIGN KEY
  • 主键约束 PRIMARY KEY 特点:非空且唯一 ,一张表中,只能有一个主键
添加主键约束的语法

方式1 建表的时候,给某个字段添加主键约束

CREATE TABLE test(
	id INT, 
	username VARCHAR(20) PRIMARY KEY  -- 给这个字段添加主键约束
);

方式2 建表的时候,给某个字段添加主键约束

CREATE TABLE test2(
	id INT,
	username VARCHAR(20),
	PRIMARY KEY(id) -- 在这里指定主键字段
);

方式3 表建好之后,添加主键约束

CREATE TABLE test3(
	id INT,
	username VARCHAR(20)
);

然后采用修改表的方式,来添加主键

ALTER TABLE test3 ADD PRIMARY KEY(username);
删除主键约束:分两种情况

情况1:
这个字段,只有主键约束,分两步来删除主键约束
第一步:

alter table 表名 drop primary key;  

这样只删除了唯一,还有个非空约束,所以得再删除非空约束
第二步:

alter table [表名] modify [列名] varchar(20) null; 

修改字段名还为原来的字段 加上null即可

情况2:
这个字段,是一个int类型字段,既有主键约束,又有自增长约束,那么得先删除自增长约束,在删除主键约束
第一步:删除自增长约束,其实就是修改自增长字段名和数据类型还为原来的字段名和类型

alter table 表名 change 字段名 字段名 数据类型;   

删除自增长约束
第二步:删除主键约束

alter table 表名 drop primary key;

第三步:删除非空约束

ALTER TABLE test3 MODIFY sid INT NULL;  

就是修改字段值可以为null

外键约束:

添加外键约束的目的,是为了保证数据的有效性和完整性。
在多表一方,添加外键约束去关联主表一方的主键。

添加了外键约束后有如下特点

  1. 主表一方不能删除多表一方还在引用的数据
  2. 多表一方不能添加主表没有描述的数据。
多表查询
多张表无条件的联合查询.没有任何意思(也叫笛卡尔积)
select a.,b. from a,b;

内连接:
格式1:显式的内连接

select a.,b. from a [inner] join b on ab;(ab为连接条件) 

格式2:隐式的内连接

select a.,b. from a,b where ab;(ab为连接条件)

外连接:
左外连接:

 select a.,b. from a left [outer] join b on 连接条件; 

outer 可以不写。意思: 先展示join左边的(a)表的所有数据,根据条件关联查询 join右边的表(b),符合条件则展示出来,不符合以null值展示.
右外连接:

select a.,b. from b right [outer] join a on 连接条件;

outer 可以不写。意思: 先展示jion右边的表(a)表的所有数据,根据条件关联查询join左边的表(b),符合条件则展示出来,不符合以null值展示.

子查询:
一个查询依赖另一个查询。

sql语句的执行顺序:
开始->FROM子句->WHERE子句->GROUP BY子句->HAVING子句->ORDER BY子句->SELECT子句->LIMIT子句->最终结果
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值