数据库学习之sql语句基础

一、MySQL简介

        MySQL是一个关系型数据库管理系统,由瑞典MySQL AB公司开发,目前属于Oracle公司。MySQL是一种关联数据库管理系统,关联数据库将数据保存在不同的表中,而不是将所有数据放在一个大仓库内,这样就增加了速度并提高了灵活性。

二、安装完数据库后出现问题的解决方法

        1、安装数据库:http://blog.csdn.net/topkipa/article/details/79097074

        2、第一次安装完Mysql之后,输入 mysql -u root -p 回车,会提示你输入密码,

此处,关于修改初始的默认密码:http://blog.csdn.net/topkipa/article/details/79097074

        3、安装完数据库之后,出现:ERROR 1820 (HY000): You must reset your password using ALTER USER statement befo re executing this statement.  解决办法:

                直接执行:set password=password('你自己设置的密码');

三、SQL语句

        分类

        sql可以划分为以下3个类别:

       DDL:数据定义语句,定义着不同的数据段、数据库、表、列、索引等数据库对象。常用语句关键字主要包括create,drop,alter等
        DML语句:数据操纵语句用于添加、删除、更新、查询数据库记录。

        DCL:数据控制语句,用于控制不同数据段直接的许可和访问级别的语句。这些语句定义了数据库、表、字段、用户的访问权限和安全级别。

        DDL:

        (1)、连接数据库:
        >>>mysql -uroot -p 
        mysql代表客户端命令,-u后面跟连接的数据库用户,而-p表示需要输入密码。
        需要注意的是:
        ·命令的结束符用“:”或者“\g”结束
        ·客户端的连接ID,这个数据记录了MySQL服务到目前为止的连接次数,每个新连接会自动加1.
        ·通过"help"或者"\h"命令来显示帮助内容,通过"\c"命令来清除命令行buffer
        (2)、创建数据库
        >>>create database dbname:创建数据库
        >>>show databases:查看系统存在哪些数据库
        >>>use test1:选择数据库test1
        >>>show tables:查看test1数据库里的数据表
        (3)、删除数据库
        >>>drop database dbname;
        (4)、修改表:alter table****:

        推荐使用图形化工具修改表结构。

        DML语句

        1、插入记录
        insert into tablename(field1,field2...) values (value1,value2...);
        insert into 后面也可以不指定字段名字,但是values后面的顺序应该和字段的排列顺序一致。
        2、更新记录
        update tablename set *****
        BEGIN
        DECLARE v_num INT DEFAULT 0;
        SELECT COUNT(nm_id) INTO v_num FROM jt_url WHERE vc_md5 = v_md5;
        IF v_num = 0 THEN
        INSERT INTO jt_url (
        dt_create,dt_update,vc_url,vc_title)
        VALUES (
        NOW(),NOW(),v_url,v_title);
        ELSE
        UPDATE jt_url SET
        dt_update = NOW(),
        vc_url = IF(LENGTH(TRIM(v_url))>0,v_url,vc_url),
        vc_title = IF(LENGTH(TRIM(v_title))>0,v_title,vc_title)
        WHERE vc_md5 = v_md5;
        END IF;
        END
        3、删除记录
        delete from tablename where ***
        4、查询:
        (1)、select * from tablename where ***
        (2)、排序和限制:
        利用order by 来实现按照某个字段进行排序,例如:
        select * from dbname where *** order by dt_create DESC LIMIT 0,1000
        其中DESC表示按照字段降序,而ASC表示按照字段升序排列。LIMIT表示只显示从第0位开始1000位结束的数据
        5、聚合
        select [field1,field2....] fun_name
        from tablename
        where ****
        GROUP BY field1,field2.....
        with rollup
        having *****
        其中,fun_name表示要做的聚合操作,例如sum(求和),count(*)记录数,max(最大值)
        group by 表示要进行分类聚合的字段,比如按照部门分类统计员工数量。
        with rollup是可选语法,表明是否对分类聚合后的结果进行再汇总。
        having关键字表示对分类后的结果再进行条件的过滤。
        select count(*) s,vc_videoid,dt_create,vc_class,vc_name,vc_infoid from youku_video WHERE vc_class="电影" GROUP BY vc_infoid having count(*)>1 ORDER BY CONVERT(vc_infoid,SIGNED)
        having和where的区别在于:having是对聚合后的结果进行条件的过滤,而where是在聚合前就对记录进行过滤,如果逻辑允许,我们尽可能用where先过滤记录,这样结果集减小,将提高聚合的效率,最后再根据逻辑选择是否使用having进行再过滤。
        6、表连接。
        1、表连接分为内\外连接,其区别在于,内连接仅选出两张表中互相匹配的记录,而外连接会选出其他不匹配的记录。
        2、外连接分为左连接和右连接:
        ·左连接左边表大
        ·右连接右边表大
        例如:
        select vc_infoid,vc_videoid from db1 left join db2 on db1.vc_name = db2.vc_name;
        ·表连接很多情况下用于优化子查询。
        7、记录联合(union,union all)
        ·union all:把结果直接拼在一起

        ·union:是在union all之后进行一次去重

        注:LEFT JOIN 关键字会从左表 (Persons) 那里返回所有的行,即使在右表 (Orders) 中没有匹配的行。

猜你喜欢

转载自blog.csdn.net/topkipa/article/details/79316512