SQL语句

1.什么是 SQL

Structured Query Language 结构化查询语言

2.SQL 作用

1) 是一种所有关系型数据库的查询规范,不同的数据库都支持。
2) 通用的数据库操作语言,可以用在不同的数据库中。
3) 不同的数据库 SQL 语句有一些区别
 

 3.SQL语句分类

1) Data Definition Language (DDL 数据定义语言) 如:建库,建表
2) Data Manipulation Language(DML 数据操纵语言),如:对表中的记录操作增删改
3) Data Query Language(DQL 数据查询语言),如:对表中的查询操作
4) Data Control Language(DCL 数据控制语言),如:对用户权限的设置

4.MySQL 的语法

1) 每条语句以分号结尾,如果在 SQLyog 中不是必须加的。
2) SQL 中不区分大小写,关键字中认为大写和小写是一样的
3) 3 种注释:

 5.SQL语言操作数据库

5.1 创建数据库

-- 直接创建数据库 db1
create database db1;
-- 判断是否存在,如果不存在则创建数据库 db2
create database if not exists db2;
-- 创建数据库并指定字符集为 gbk
create database db3 default character set gbk;
5.2 查看数据库
!!按 tab 键可以自动补全关键字 
-- 查看所有的数据库
show databases;
-- 查看某个数据库的定义信息
show create database db3;
show create database db1;

5.3 修改数据库

-- 将 db3 数据库的字符集改成 utf8
alter database db3 character set utf8;

5.4 删除数据库

-- 删除 db2 数据库
drop database db2;
5.5 使用数据库

-- 查看正在使用的数据库
select database();
-- 改变要使用的数据库
use db4;

6.SQL语言操作数据库表

 6.1 创建表

 

-- 创建 student 表包含 id,name,birthday 字段
create table student (
id int, -- 整数
name varchar(20), -- 字符串
birthday date -- 生日,最后没有逗号
);
快速创建一个表结构相同的表
-- 创建一个 s1 的表与 student 结构相同
create table s1 like student;
desc s1;

6.2 MySQL 数据类型

常使用的数据类型如下:

  1.int:整数类型

  2.double:浮点类型

  3.date:日期,只包含年月日,yyyy-MM-dd

  4.datetime:日期,包含年月日时分秒,yyyy-MM-dd HH-mm-ss

  5.varchar:字符串 varchar(20):姓名最大20个字符

详细的数据类型如下:

 6.3 查看表 

-- 查看 day21 数据库中的所有表
use day21;
show tables;
-- 查看 student 表的结构
desc student;
-- 查看 student 的创建表 SQL 语句
show create table student;

6.4 删除表 

-- 直接删除表 s1 表
drop table s1;
-- 判断表是否存在并删除 s1 表
drop table if exists s1;

6.5 插入数据

-- 插入所有的列,向学生表中
insert into student (id,name,age,sex) values (1, '孙悟空', 20, '');
insert into student (id,name,age,sex) values (2, '孙悟天', 16, '');
-- 插入所有列
insert into student values (3, '孙悟饭', 18, '', '龟仙人洞中');
-- 如果只插入部分列,必须写列名
insert into student values (3, '孙悟饭', 18, '');
select * from student;

注意:

  *列名和值要一一对应

  *如果表名后面不定义列名,则默认给所有列添加值:

    insert into 表名 values(值1,值2,……值n);

  *除了数字类型,其他类型需要使用引号(单双都可以)

8.数据库的查询

 8.1 语法:

   select  -字段列表

  from -表名列表

  where -条件列表

  group by -分组字段

  having -分组之后的条件

  order by -排序

  limit -分页限定

1.多个字段的查询

  select 字段名1,字段名2,……from 表名;

  -注意: -如果查询所有字段,则可以使用*来替代字段列表

2.去除重复:

  -distinct

3.计算列:

  一般可以使用四则运算计算一些列的值。(一般只会进行数值型的计算)

  -ifnull(表达式1, 表达式2):null参与的运算,计算结果都为null

    *表达式1:哪个字段需要判断是否为null

    *如果该字段为null后的替换值

4.起别名:

  as: as也可以省略

 

 8.2 条件查询

 

--查询年龄大于20岁:
    select * from student3 where age > 20;
--查询年龄等于20岁:
    select * from student3 where age = 20;
--查询年龄不等于20岁:
    select * from student3 where age != 20;
    select * from student3 where age <> 20;
--查询年龄大于等于20,小于等于30:
    select * from student3 where age >= 20 && age <= 30;
    select * from student3 where age >= 20 and age <= 30;
    select * from student3 where age between 20 and 30;
--查询年龄22岁,18岁,25岁的信息:
    select * from student3 where age= 22 or age = 18 or age = 25;
    select * from student3 where age in (22, 18, 25);
--查询英语成绩为null
    select * from student3 where english = null;   (不对,null值不能使用 = (!=) 判断)
    select * from student3 where english is null;
--查询英语成绩不为null
    select * from student3 where english is not null;
--查询姓马的有哪些?(like)
    select * from student3 where name like ‘马%’;
--查询第二个字是‘化’的人
    select * from student3 where name like “_化%”;
--查询姓名是3个字的人 (几个字就写几个下划线)
    select * from student3 where name like “___”;
--查询姓名中包含‘德’的人
    select * from student3 where name like%%’;

8.3 排序查询

 8.4 聚合函数

 

注意:

聚合函数的计算,排除null值

  解决方案:

    1.选择不包含非空的列进行计算

     2.ifnull函数

 8.5 分组查询

-- 按照性别分组,分别查询男,女同学的平均分
    select sex, avg(math) from student3 group by sex;
--按照性别分组,分别查询男,女同学的平均分,人数
    select sex, avg(math), count(id) from student3 group by sex;
--按照性别分组,分别查询男,女同学的平均分,人数 
(要求:分数低于70分的人,不参与分组)
    select sex, avg(math), count(id) from student3 where math >70 group by sex;
--按照性别分组,分别查询男,女同学的平均分,人数 
(要求:分数低于70分的人,不参与分组,且分组之后要大于2个人)
    select sex, avg(math), count(id) from student3 where math >70 group by sex having count(id) > 2;

9. 约束

 概念:对表中的数据进行限定,从而保证数据的正确性,有效性,和完整性。

分类:

  1.主键约束:primary key

  2.非空约束:not null

  3.唯一约束:unique 值不能重复

  4.外键约束:foreign key

主键约束:primary key

 

 非空约束:not null

 

 唯一约束:unique 值不能重复

外键约束:foreign key

 

 

 

CREATE TABLE department(
    id INT PRIMARY KEY AUTO_INCREMENT,
    dep_name VARCHAR(32),
    dep_location VARCHAR(32)
);
INSERT INTO department VALUE(NULL, '研发部', '广州'),(NULL, '销售部', '深圳');

CREATE TABLE employee(
    id INT PRIMARY KEY AUTO_INCREMENT,
    NAME VARCHAR(32),
    age INT,
    dep_id INT, -- 员工所在部门
    CONSTRAINT emp_department FOREIGN KEY (dep_id) REFERENCES department(id) -- 重点
);

INSERT INTO employee(NAME, age, dep_id) VALUE('张三', 20, 1);
INSERT INTO employee(NAME, age, dep_id) VALUE('李四', 21, 1);
INSERT INTO employee(NAME, age, dep_id) VALUE('王五', 20, 1);
INSERT INTO employee(NAME, age, dep_id) VALUE('老王', 20, 2);
INSERT INTO employee(NAME, age, dep_id) VALUE('大王', 22, 2);
INSERT INTO employee(NAME, age, dep_id) VALUE('小王', 18, 2);

 10. 外连接

 

 

 11. 子查询

 

 

 

 

posted @ 2020-05-26 21:56  独剑飞行天下  阅读(296)  评论(0)    收藏  举报