zoukankan      html  css  js  c++  java
  • sql基础

    一、sql的基础用法:针对mysql

    -- 创建数据库
    CREATE DATABASE `testdatabase` DEFAULT CHARACTER SET utf8;
    
    -- 删除数据库
    DROP DATABASE `testdatabase`;
    
    -- 查询所有的数据库
    SHOW DATABASES;
    
    -- 修改数据库字符编码
    ALTER DATABASE `testdatabase` DEFAULT CHARACTER SET gbk;
    
    -- 使用数据库
    USE testsql;
    
    -- 创建表
    CREATE TABLE `sys_user2` (
        id INT ,
        `name` VARCHAR(64)
    );
    
    -- 删除表
    DROP TABLE sys_user2;
    
    -- 修改表名
    ALTER TABLE sys_user2 RENAME TO sys_user;
    
    -- 新增字段
    ALTER TABLE sys_user ADD COLUMN gender VARCHAR(2);
    
    -- 新增字段(多个)
    ALTER TABLE sys_user ADD age INT,ADD remark VARCHAR(512);
    
    -- 修改字段名称
    ALTER TABLE sys_user CHANGE COLUMN remark remark2 VARCHAR(100);
    
    -- 删除字段
    ALTER TABLE sys_user DROP COLUMN age ,DROP COLUMN remark2;
    
    
    -- 插入数据(所有字段)
    INSERT INTO sys_user VALUES(1,'eric','','深圳人');
    INSERT INTO sys_user VALUES(2,'stan','','广州人');
    INSERT INTO sys_user VALUES(3,'kenny','','重庆人');
    -- 插入数据(部分字段)
    INSERT INTO sys_user (id,`name`,remark) VALUES(4,'kyle','北京人');
    
    -- 修改数据
    UPDATE sys_user SET `name` = 'stan',remark = '湖北人'  WHERE id = 1;
    
    -- 删除表数据
    DELETE FROM sys_user WHERE id = 1;
    
    -- 删除表的所有数据,同时把表的自增长置为0,无法回滚
    TRUNCATE TABLE sys_user;
    
    -- 查询表数据
    SELECT * FROM sys_user WHERE id = 1;
    SELECT id,`name` AS username,gender, remark FROM sys_user WHERE id = 1;
    SELECT DISTINCT gender FROM sys_user;
    SELECT `name`,'A' AS score FROM sys_user;
    SELECT * FROM sys_user WHERE gender IS NULL;
    SELECT * FROM sys_user WHERE `name` LIKE '%s%'; -- %表示任意多个字符,_表示一个字符.
    SELECT AVG(id) FROM sys_user;
    SELECT MAX(id) FROM sys_user;
    SELECT MIN(id) FROM sys_user;
    SELECT SUM(id) FROM sys_user;
    SELECT COUNT(id) FROM sys_user; -- 会忽略掉null值的数据
    SELECT gender ,COUNT(*) FROM sys_user GROUP BY gender HAVING COUNT(*) >1;
    
    -- 多表关联
    -- 1.交叉连接查询(不推荐,产生笛卡尔乘积现象)
    SELECT empName,deptName FROM employee,dept;
    
    -- 内连接查询
    SELECT empName,deptName
    FROM employee,dept
    WHERE employee.deptId=dept.id 
    -- 内连接的另一种语法
    SELECT empName,deptName
    FROM employee
    INNER JOIN dept ON employee.deptId=dept.id;
    
    -- 左连接查询:使用左边表的数据去匹配右边表的数据,如果符合连接条件的结果则显示,如果不符合连接条件则显示null
    SELECT d.deptName,e.empName
    FROM dept d
    LEFT JOIN employee e
    ON d.id=e.deptId;
    
    -- 右连接查询: 使用右边表的数据去匹配左边表的数据,如果符合连接条件的结果则显示,如果不符合连接条件则显示null
    SELECT d.deptName,e.empName
    FROM employee e
    RIGHT JOIN dept d
    ON d.id=e.deptId;
    
    -- 存储过程
    -- 创建存储过程
    DELIMITER $       -- 声明存储过程的结束符
    CREATE PROCEDURE pro_test()           --存储过程名称(参数列表)
    BEGIN             -- 开始
        -- 可以写多个sql语句;          -- sql语句+流程控制
        SELECT * FROM employee;
    END $            -- 结束 结束符
    
    -- 执行存储过程
    CALL pro_test();          -- CALL 存储过程名称(参数);
    
    参数:
    IN:   表示输入参数,可以携带数据带存储过程中
    OUT: 表示输出参数,可以从存储过程中返回结果
    INOUT: 表示输入输出参数,既可以输入功能,也可以输出功能
    
    
    -- **************三、存储过程*******************-
    -- 声明结束符
    -- 创建存储过程
    DELIMITER $
    CREATE PROCEDURE pro_test()
    BEGIN
        -- 可以写多个sql语句;
        SELECT * FROM employee;
    END $
    
    -- 执行存储过程
    CALL pro_test();
    
    -- 3.1 带有输入参数的存储过程
    -- 需求:传入一个员工的id,查询员工信息
    DELIMITER $
    CREATE PROCEDURE pro_findById(IN eid INT)  -- IN: 输入参数
    BEGIN
        SELECT * FROM employee WHERE id=eid;
    END $ 
    
    -- 调用
    CALL pro_findById(4);
    
    -- 3.2 带有输出参数的存储过程
    DELIMITER $
    CREATE PROCEDURE pro_testOut(OUT str VARCHAR(20))  -- OUT:输出参数
    BEGIN
            -- 给参数赋值
        SET str='helljava';
    END $
    
    -- 删除存储过程
    DROP PROCEDURE pro_testOut;
    -- 调用
    -- 如何接受返回参数的值??
    -- ***mysql的变量******
    --  全局变量(内置变量):mysql数据库内置的变量 (所有连接都起作用)
            -- 查看所有全局变量: show variables
            -- 查看某个全局变量: select @@变量名
            -- 修改全局变量: set 变量名=新值
            -- character_set_client: mysql服务器的接收数据的编码
            -- character_set_results:mysql服务器输出数据的编码
            
    --  会话变量: 只存在于当前客户端与数据库服务器端的一次连接当中。如果连接断开,那么会话变量全部丢失!
            -- 定义会话变量: set @变量=值
            -- 查看会话变量: select @变量
            
    -- 局部变量: 在存储过程中使用的变量就叫局部变量。只要存储过程执行完毕,局部变量就丢失!!
    
    -- 1)定义一个会话变量name, 2)使用name会话变量接收存储过程的返回值
    CALL pro_testOut(@NAME);
    -- 查看变量值
    SELECT @NAME;
    
    -- 3.3 带有输入输出参数的存储过程
    DELIMITER $
    CREATE PROCEDURE pro_testInOut(INOUT n INT)  -- INOUT: 输入输出参数
    BEGIN
       -- 查看变量
       SELECT n;
       SET n =500;
    END $
    
    -- 调用
    SET @n=10;
    
    CALL pro_testInOut(@n);
    
    SELECT @n;
    
    -- 3.4 带有条件判断的存储过程
    -- 需求:输入一个整数,如果1,则返回“星期一”,如果2,返回“星期二”,如果3,返回“星期三”。其他数字,返回“错误输入”;
    DELIMITER $
    CREATE PROCEDURE pro_testIf(IN num INT,OUT str VARCHAR(20))
    BEGIN
        IF num=1 THEN
            SET str='星期一';
        ELSEIF num=2 THEN
            SET str='星期二';
        ELSEIF num=3 THEN
            SET str='星期三';
        ELSE
            SET str='输入错误';
        END IF;
    END $
    
    CALL pro_testIf(4,@str);
     
    SELECT @str;
    
    -- 3.5 带有循环功能的存储过程
    -- 需求: 输入一个整数,求和。例如,输入100,统计1-100的和
    DELIMITER $
    CREATE PROCEDURE pro_testWhile(IN num INT,OUT result INT)
    BEGIN
        -- 定义一个局部变量
        DECLARE i INT DEFAULT 1;
        DECLARE vsum INT DEFAULT 0;
        WHILE i<=num DO
              SET vsum = vsum+i;
              SET i=i+1;
        END WHILE;
        SET result=vsum;
    END $
    
    DROP PROCEDURE pro_testWhile;
    
    
    CALL pro_testWhile(100,@result);
    
    SELECT @result;
    
    USE day16;
    
    -- 3.6 使用查询的结果赋值给变量(INTO)
    DELIMITER $
    CREATE PROCEDURE pro_findById2(IN eid INT,OUT vname VARCHAR(20) )
    BEGIN
        SELECT empName INTO vname FROM employee WHERE id=eid;
    END $
    
    CALL pro_findById2(1,@NAME);
    
    SELECT @NAME;
    
    -- 函数
    DELIMITER ;;
    
    DROP PROCEDURE IF EXISTS `selectUserByAccount2`;;
    
    CREATE PROCEDURE `selectUserByAccount2`(IN saccount VARCHAR(50),OUT `oname` VARCHAR(80),OUT onikname VARCHAR(80))
    BEGIN
        SELECT 
            `name` ,
            nikname INTO `oname`,onikname
        FROM 
            `user`
        WHERE account = saccount;
    
        END;;
    
    DELIMITER ;
  • 相关阅读:
    SharePoint 2013 安装.NET Framework 3.5 报错
    SharePoint 2016 配置工作流环境
    SharePoint 2016 站点注册工作流服务报错
    Work Management Service application in SharePoint 2016
    SharePoint 2016 安装 Cumulative Update for Service Bus 1.0 (KB2799752)报错
    SharePoint 2016 工作流报错“没有适用于此应用程序的地址”
    SharePoint 2016 工作流报错“未安装应用程序管理共享服务代理”
    SharePoint JavaScript API in application pages
    SharePoint 2016 每天预热脚本介绍
    SharePoint 无法删除搜索服务应用程序
  • 原文地址:https://www.cnblogs.com/kyleinjava/p/9199747.html
Copyright © 2011-2022 走看看