SQL语句

  • MySQL里一个数据库就是一个文件夹。
  • 文件以frm结尾的是一个表,myd结尾的是一个数据文件。
  • 客户端通过数据库管理系统,创建一个至多个数据库,数据库又创建多个数据表,表里又储存多个数据。
  • 然后用户可以通过SQL语句操作数据库管理系统,对数据库、数据表、以及表里的数据进行操作(增删改查)了。

SQL

SQL简介

  • 它是结构化查询语言,是操作关系型数据库的一门编程语言。
  • 定义了操作所有关系型数据库的统一标准。
  • 同一需求,不同数据库操作的方式都有所不同。可以成为“方言”

SQL通用语法

  1. SQL语句可以多行书写,以 ; 分号结尾。
  2. MySQL数据库的SQL语句并不区分大小写,但是关键字建议大写。
  3. MySQL语句中注释
    • 单行注释:在语句前加一个 #号
    • 多行注释:/* 想写的注释 */

SQL分类

  • DDL:用户通过SQL语句对数据库、数据表进行操作的语句;
  • DML:对表中的数据进行增删改;
  • DQL:对表中的数据进行查;
  • DCL:对数据库进行权限的控制;

DDL

  • DDL操作数据库:
show databases;	#查询数据库

create database bd1;
create database if not exists db1;	#如果不存在db1,就执行创建语句,反之则不执行;
#创建数据库的两种SQL语句

drop database db1;
drop database if  exists db1;	#如果存在db1,就执行删除语句,反之则不执行;
#删除数据库的两种SQL语句

use db1;	#进入db1这个数据库

select database();	#查询正在使用哪个数据库

  • DDL操作数据表:
对表的查询
/*对表的查询*/
use mysql;	#对表进行操作首先要进入对应的数据库中

show tables;	#查看数据库中的表

desc db;	#可以查看目标表中的结构  可以查看表的字段、类型、描述信息
对表的创建
/*对表的创建*/
create table 表名(
	字段名 数据类型,
	字段名 数据类型,
	字段名 数据类型	#最后一行内容不加逗号
);
数据类型
//常用的数据类型的用法
age int 

double score(总长度,小数点后保留几位)---> double score(5,2)	//满分150分长度为三,小数点后要保留两位,所以为(5,2)

birthday date	//表示的日期只有年月日

name char(12)	//定长字符串 储存性能高但浪费空间
name varchar(12)	//变长字符串 储存性能低但节约空间
//比如输入“张三”,char会为张三分配12个字符(其余十个字符用空格代替),而varchar只会为张三分配两个字符。

对表的删除
drop table tb_user;
drop table if not exists tb_user;

对表的修改
  • 修改表名

alter table 表名 rename to 新的表名;

alter table student rename to stu;
  • 添加一列

alter table 表名 add 列名 数据类型;

alter table stu add address varchar(50);
  • 修改数据类型

alter table 表名 modify 列名 修改成的数据类型;

alter table stu modify address char(50);
  • 同时修改列名和数据类型

alter table 表名 change 列名 修改成的列名 修改成的数据类型

alter table stu change address add varchar(50);
  • 删除列

alter table 表名 drop 列名;

alter table stu drop addr;

DML

添加数据
#增加数据
INSERT INTO 表名 (列名 1,列名 2,...) VALUES (值 1,值 2);
#insert into 表名 (列名1,列名2,...) values (值1,值2);

#可以给表中所有的列名都赋值,都赋值时可以省略表名之后的,但不建议
INSERT INTO stu VALUES( 2, '李四', 1,'2003-01-25', 100.20, '3208408966@qq.com', '13000006000', 1 );

#也可以同时操作多个列,但导入的数据前都加逗号分隔开
INSERT INTO stu ( id, NAME, sex, birthday, score, email, tel, STATUS ) VALUES( 3, '李四', 1,'2003-01-25', 100.20, '3208408966@qq.com', '13000006000', 1 ),( 4, '李四', 1,'2003-01-25', 100.20, '3208408966@qq.com', '13000006000', 1 ),( 5, '李四', 1,'2003-01-25', 100.20, '3208408966@qq.com', '13000006000', 1 ),( 6, '李四', 1,'2003-01-25', 100.20, '3208408966@qq.com', '13000006000', 1 ),( 7, '李四', 1,'2003-01-25', 100.20, '3208408966@qq.com', '13000006000', 1 ),( 8, '李四', 1,'2003-01-25', 100.20, '3208408966@qq.com', '13000006000', 1 );

修改数据
#修改数据
--修改数据update 表名 set 列名1=值1,列名2=值2,...where 条件;/UPDATE 表名 SET 列名1=值1,列名2=值2,...WHERE 条件; 
-- 将张三改为男的(1)
UPDATE stu SET sex = 0,birthday = '2022-01-04'WHERE name = '张三';

删除数据
#删除数据
-- 删除数据 DELETE FROM 表名 WHERE 条件;
-- 删除id为8的李四
delete from stu where id = 8;

DQL

查询数据库中的数据
基础查询

查询数据库中的列

select 列名1,;列名2,… from 表名; *号可以代表全部。

select * from mate;
select id,name,sex,age,score from mate;

-- 如果查询单列数据有重复的数据,我们可以加入 distinct 来去除重复数据
select distinct sex from mate;

-- 添加列名的别名 列名后添加 as 别名 ,或者 空格+别名
select id as 编号,name as 姓名,sex as 性别,age as 年龄,score as 成绩 from mate; 

-- 查询一列中数据的总数、总和、最大、最小和平均
-- 查询人数
select count(name) from mate; 
-- 查询成绩最大
select max(score) from mate;
-- 查询成绩最小
select min(score) from mate;
-- 查询成绩平均
select avg(score) from mate;
-- 查询成绩总和
select sum(score) from mate;

分组查询(group by)

select 要查询的内容 from 表名 where 条件 group by 要分组的列名 having 条件;
where > 聚合函数 > having having可以对聚合函数进行操作而where不行

-- 查询不同年龄的平均分
select age,avg(score) from mate group by age;
-- 查询不同年龄的平均分以及各自的人数
select age,avg(score),count(*) from mate group by age;
-- 查询不同年龄的平均分以及各自的人数,要求:低于80分的不参与分组
select age,avg(score),count(*) from mate where score >= 80 group by age;
-- 查询不同年龄的平均分以及各自的人数,要求:低于80分的不参与分组,分组后人数要大于等于3
select age,avg(score),count(*) from mate where score >= 80 group by age having count(*)>=3;
分页查询(limit)

select * from mate limit 起始索引[(当前页码-1)*当前页码显示的条数],显示的条目数;

-- 从零开始,查询三条数据
select * from mate limit 0,2;
-- 每页显示两条数据,显示第一页。
select * from mate limit 0,2;
-- 每页显示两条数据,显示第二页。
select * from mate limit 2,2;
-- 每页显示两条数据,显示第三页。
select * from mate limit 4,2;
-- 在 MySQL 中分页查询的方言是limit,在 Oracle 中使用rownumber,在 SQL Server 中使用 top
排序查询(order by)

查询某一列数据,并且升序或者降序排列
asc-升序排列 desc-降序排列 使用 order by 列名 asc/desc;

select * from mate oder by score desc;#按成绩大小降序排列成绩
select * from mate order by score desc,age asc;#按成绩大小先降序排列成绩,然后再升序排列年龄。
-- 只有当第一个条件相同时,第二个条件才被使用。
条件查询 (where)
-- 成绩大于85分的
select * from mate where score >85;
-- 成绩大于85并且小于95分的
select * from mate where score >85 and score <95;
-- 查询年纪等于21的学生
select * from mate where age = 21;
-- 查询年纪不等于21的学生
select * from mate where age != 21;
-- 查询年纪等于21或者等于20的学生
select * from mate where age = 20 or age = 21;
-- 查询有无null
select * from mate where score is not null;
-- 查询某段日期内的数据用 between 起始日期 and 结束日期
-- 查询姓张的
select * from mate where name like '张%';
-- 查询第三个字为文的
select * from mate where name like '%文';
-- 查询第二个字为凯的
select * from mate where name like '_凯%';
-- 查询名字中含有佳的
select * from mate where name like '%佳%';

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值