SQL基础

#SQL基础

ddl学习
1. 操作数据库
  1. C (Create):创建

    • 创建数据库

      create databases 数据库名;
      
    • 创建数据库前先判断是否存在

      create database if not exists 数据库名;
      
    • 创建数据库,判断是否存在,并指定字符集

      create database if not exists 数据库名  character set 字符集
      
    • 练习:创建数据库db1 ,判断是否存在,并指定字符集为utf8

      create database if not exists db1 character set utf8;
      
  2. R (Retrieve):查询

    • 查询所有数据库的名称

      show databases;
      
    • 查询某个数据库的字符集–其实是查询数据库的创建sql语句

      show  create database db1(数据库名);
      
  3. U(Update):修改

    • 修改数据库的字符集

      alter database db1(数据库名) character set utf8(字符集);
      
  4. D(Delete):删除

    • 删除数据库

      drop database db1(数据库名);
      
    • 删除数据库前先判断是否存在

      drop database if exists db1(数据库名);
      
  5. 使用数据库

    • 查询当前正在使用的数据库名称

      select database();
      
    • 注意 和 show databases;的细微区别

      1. 语义不同,分别是:查看所有数据库名称,查看当前正在使用的数据库名称
      2. 写法不同,database() 和 databases 
      
    • 使用数据库

      use db1(数据库名);   
      
2. ddl操作表
  1. 查询

    1. 查询某个数据库中所有的表名称

      show tables;
      
    2. 查询表结构

      desc 表名;
      
    3. 查询表的创建语句

      show create table 表名;
      
  2. 创建

    创建表

        create table 表名(
            列名1  数据类型1,
            列名2  数据类型2,
            ......
            列名n 数据类型n
        );
    
        注意:最后一列,不需要加逗号
    

    画图,理解什么是表

    数据类型
    1. int 整数类型
    age int
    2. double 小数类型
    score double(5,2) 总长度5,小数点后的位数2,最大值999.99
    3. date 日期,只包含年月日,yyyy-MM-dd
    4. datetime 日期,包含年月日和时分秒 yyyy-MM-dd HH:mm:ss
    5. timestamp 时间戳,包含年月日和时分秒 yyyy-MM-dd HH:mm:ss
    如果该类型字段没有赋值,或赋值为null,则默认使用当前系统时间填充
    6. varchar 字符串(长度可变)
    7. char字符串(长度固定)
    name varchar(20) 表示姓名最长20个字符的限制 
    
    注意:
    1.字符串varchar和小数double都要指定长度
    2.varchar和日期类型的数据要加上引号(推荐使用单引号)
    
    

    练习:创建一个学员表

    	create table student(
    	id int,
        name varchar(10),
        age int,
        score double(4,1),
        birth date,
        insert_time timestamp
    );
    
    案例:
    1.创建一个员工表employee,需要如下字段:
    员工编号,姓名,性别,年龄,工龄,生日,工资
    
    create table employee(
        id int, -- 员工编号
        name varchar(20),-- 姓名
        gender char(1),-- 性别
        age int,-- 年龄
        work_years int,-- 工龄
        birth date,-- 生日
        salary double(8,2) -- 工资
    );
    

    复制表

    create table 表名 like 被复制的表名;
    
  3. 删除表

    1. drop table 表名
    2. drop table if exists 表名
    
  4. 修改

    1.修改表

    • 修改表名

       alter table 表名 rename to 新表名
      
    • 修改表的字符集

      -- 查看表的字符集,其实是查看表的创建语句
      show create table 表名;
       -- 修改表的字符集
      alter table 表名 character set 字符集;
      

2.修改列

  • 添加一列

    alter table 表名 add 列名 数据类型;
    
  • 修改列类型

     alter table 表名 modify 列名 数据类型;
    
  • 修改列名和类型

    alter table 表名 change 旧列名 新列名 数据类型;
    
  • 删除列

    alter table 表名 drop 列名;
    

综合练习:

1.查看当前的服务器一共有多少个数据库 show databases;
2.查看当前正在使用的数据库         select database();
3.选定其中的一个数据库,进行使用     use db3;
4.查看当前库中有多少个表           show tables;
5.创建一个表
    create table employee(
        id int, -- 员工编号
        name varchar(20),-- 姓名
        gender char(1),-- 性别
        age int,-- 年龄
        work_years int,-- 工龄
        birth date,-- 生日
        salary double(8,2) -- 工资
    );
6.修改表:
	1.修改员工表employee名为emp
    2.修改表的字符集为gbk,查看表的字符集
    3.修改表的字符集为utf8,并查看表的字符集
    4.添加'部门'列
    5.修改'性别'列类型为varchar(6) 
    6.修改gender为sex,类型为varchar(6)
    7.删除'部门'
  • 图形化界面工具 SQLyog
    • 演示安装和连接,写sql语句并执行
    • 调节字体大小
dml学习
  1. 添加数据
  • 添加全部字段

    insert into 表名 (列名1,列名2,...列名n) values (值1,值2,...值n);
    
    注意:
    1.值要和列名要一一一对应,有几个列就要有几个值
    2.添加全部字段数据时,列名部分可以省略,即:
         insert into 表名 values (值1,值2,...值n);
    
  • 添加部分字段

    insert into 表名 (列名1,列名2,列名3,...) values (值1,值2,值3,...);
    
    注意:
    1.值必须和列名对应
    2.列名可以不是连续的
    3.列名可以不按照表结构中的顺序,但通常建议按照先后顺序
    4.添加部分字段时,列名不能省略
    5.没有添加数据的字段默认使用null填充
    
  • 批量添加数据

    随堂测试:
    1.向员工表中新增3名员工信息:
    	2 张三  25岁,男
    	3 李四  26岁,男
    	4 王五  27岁,女
    
    -- 分析:属于添加部分字段 
    insert into emp (id,name,age,sex) values
    (2,'张三',3,'男'),(3,'李四',26,'男'),(4,'王五',27,'女')
    
    -- 批量新增语法
    insert into 表名 (字段1,字段2,...) values (值1,值2,...),(值1,值2,...),(值1,值2,...)
    
  • 注意:

    添加数据值时,除了数字类型,其它类型需要使用引号(单双引号都可以),建议使用单引号。
    
  1. 删除数据
  • 删除满足条件的数据

    delete from 表名 [where 条件];
    
    注意:
    1.如果不加条件,则删除表中所有的数据
    
    eg:
    delete from emp1;
    delete from emp1 where true; 
    delete from emp1 where 1=1;
    
  • 删除表中的所有数据

    truncate table 表名;
    
    两种删除所有数据的方法:
    1.truncate方式,先删除整个表,再创建一张同样结构的表,执行效率高,推荐使用。
    2.delete from 表名 ,不带条件,有多少条记录就会执行多少次删除操作,效率不高,不推荐。
    
  1. 修改数据
  • 语法

    update 表名 set 列名1=值1, 列名2=值2, ... [where 条件];
    
    注意:
    1.如果不带条件,则会修改所有的数据
    
    随堂测试:
    1.曹操的年龄加1岁,工资涨500
    UPDATE emp SET age=age+1,salary =salary+500 WHERE name='曹操';
    
    2.修改所有员工的部门三国
    update emp set dept='三国';
    
dql学习
  • 完整的查询语法

    select
    	字段列表
    from
    	表名列表
    where
    	条件列表
    group by
    	分组字段
    having
    	分组之后的条件
    order by
    	排序
    limit
    	分页限定
    
1. 基础查询
  1. 多个字段查询

    select 字段名1,字段名2... from 表名;
    
    注意: 如果查询所有字段,则可以使用*来替代字段列表。
    
  2. 去除重复

    关键字 distinct 
    直接放在select后面
    
  3. 四则运算

    一般可以使用四则运算计算一些列的值。(一般只会进行数值型的计算)
     ifnull(表达式1,表达式2):null参与的运算,计算结果都为null
    	 表达式1:哪个字段需要判断是否为null
    	 如果该字段为null后的替换值。
    

    案例:计算学员的英语和数学成绩和

    select math,english,ifnull(math,0)+ifnull(english,0) from stu;
    
  4. 起别名

    字段名 后写关键字 as  或省略as 直接用空格
    
2. 条件查询
  • where和 运算符 构成查询条件
> 、< 、<= 、>= 、= 、<>
 BETWEEN...AND  
 IN( 集合) 
 LIKE:模糊查询
 占位符:
     _:单个任意字符
     %:多个任意字符
 IS NULL  
 and  或 &&
 or  或 || 
 not  或 !
  • 案例
-- 创建表
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);



-- 查询年龄大于20岁
	SELECT * FROM student WHERE age > 20;		
	SELECT * FROM student WHERE age >= 20;
			
-- 查询年龄等于20岁
	SELECT * FROM student WHERE age = 20;
			
-- 查询年龄不等于20岁
	SELECT * FROM student WHERE age != 20;
	SELECT * FROM student WHERE age <> 20;
			
-- 查询年龄大于等于20 小于等于30			
	SELECT * FROM student WHERE age >= 20 &&  age <=30;
	SELECT * FROM student WHERE age >= 20 AND  age <=30;
	SELECT * FROM student WHERE age BETWEEN 20 AND 30;
			
-- 查询年龄22岁,18岁,25岁的信息
	SELECT * FROM student WHERE age = 22 OR age = 18 OR age = 25
	SELECT * FROM student WHERE age IN (22,18,25);
			
-- 查询英语成绩为null
	SELECT * FROM student WHERE english = NULL; -- 不对的。null值不能使用 = (!=) 	
	SELECT * FROM student WHERE english IS NULL;
			
-- 查询英语成绩不为null
	SELECT * FROM student WHERE english  IS NOT NULL;
	SELECT * FROM student WHERE NOT english  IS  NULL;
3. 模糊查询
  • 使用关键字 like

    通配符:
    _ 匹配一个字符
    % 匹配0-n个字符
    
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值