当前位置: 首页 > news >正文

浙江网站制作wordpress 引用页面

浙江网站制作,wordpress 引用页面,许昌小学网站建设,制作网页时SQL#xff08;Structured Query Language#xff0c;结构化查询语言#xff09;是用于管理和操作关系型数据库的标准语言。它允许用户定义、查询、更新和管理数据库中的数据。SQL是一种声明性语言#xff0c;用户只需要指定想要执行的操作#xff0c;而不需要详细说明如何…SQLStructured Query Language结构化查询语言是用于管理和操作关系型数据库的标准语言。它允许用户定义、查询、更新和管理数据库中的数据。SQL是一种声明性语言用户只需要指定想要执行的操作而不需要详细说明如何实现这些操作。SQL被广泛应用于各种数据库系统如MySQL、PostgreSQL、Oracle、SQL Server等。 为了更全面地理解SQL我们可以将其分为以下几个主要部分 数据定义语言DDL数据操作语言DML数据查询语言DQL数据控制语言DCL事务控制语言TCL 1、数据定义语言DDL DDL用于定义和管理数据库的结构包括创建、修改和删除数据库对象如表、索引、视图等。 常见的 DDL 操作包括 CREATE创建数据库对象。ALTER修改现有数据库对象的结构。DROP删除数据库对象。TRUNCATE清空表中的所有数据但保留表结构。RENAME重命名数据库对象。 使用示例 创建数据库 CREATE DATABASE mydatabase;创建表 CREATE TABLE employees (id INT PRIMARY KEY,name VARCHAR(100),age INT,department VARCHAR(50));修改表结构 ALTER TABLE employees ADD COLUMN salary DECIMAL(10, 2);删除表 DROP TABLE employees;清空表数据 TRUNCATE TABLE employees;重命名表 RENAME TABLE old_table_name TO new_table_name;2、数据操作语言DML DML用于插入、更新和删除数据库中的数据。 常见的DML操作包括 INSERT向表中插入新数据。UPDATE更新表中的现有数据。DELETE从表中删除数据。 使用示例 插入数据 INSERT INTO employees (id, name, age, department) VALUES (1, Alice, 30, HR);批量插入数据 INSERT INTO employees (id, name, age, department) VALUES (2, Bob, 28, Engineering),(3, Charlie, 35, Sales);更新数据 UPDATE employees SET salary 60000 WHERE id 1;删除数据 DELETE FROM employees WHERE id 2;删除所有数据 DELETE FROM employees;3、数据查询语言DQL DQL用于从数据库中检索数据最常见的DQL语句是SELECT。通过SELECT语句用户可以查询表中的数据并使用各种条件、排序、分组等功能来获取所需的结果。 使用示例 基本查询 SELECT * FROM employees;选择特定列 SELECT name, age FROM employees;带条件的查询 SELECT * FROM employees WHERE department HR;使用AND/OR组合条件 SELECT * FROM employees WHERE department HR AND age 30;使用IN进行多值匹配 SELECT * FROM employees WHERE department IN (HR, Sales);使用LIKE进行模糊匹配 SELECT * FROM employees WHERE name LIKE A%; -- 匹配以 A 开头的名字使用BETWEEN进行范围查询 SELECT * FROM employees WHERE age BETWEEN 25 AND 35;使用ORDER BY排序 SELECT * FROM employees ORDER BY age DESC; -- 按年龄降序排列使用LIMIT限制结果数量 SELECT * FROM employees LIMIT 5; -- 只返回前 5 条记录使用GROUP BY分组 SELECT department, COUNT() AS employee_count FROM employees GROUP BY department;使用HAVING过滤分组结果 SELECT department, COUNT() AS employee_count FROM employees GROUP BY department HAVING COUNT() 2;使用JOIN连接多个表 SELECT e.name, d.department_name FROM employees e JOIN departments d ON e.department_id d.id;使用子查询 SELECT * FROM employees WHERE salary (SELECT AVG(salary) FROM employees);4、数据控制语言DCL DCL用于控制用户对数据库的访问权限。通过DCL管理员可以授予或撤销用户的权限确保数据的安全性和完整性。 常见的DCL操作包括 GRANT授予用户权限。REVOKE撤销用户权限。 使用示例 授予用户权限这条语句的作用是授予用户user1在主机localhost上对employees表的 SELECT和INSERT权限。 GRANT SELECT, INSERT ON employees TO user1localhost;授予所有权限常用用户权限包含SELECT, INSERT, UPDATE, DELETE四个ALL PRIVILEGES是所有权限包含更多的操作 GRANT ALL PRIVILEGES ON *.* TO adminlocalhost;说明 SELECT, INSERT, UPDATE, DELETE和ALL PRIVILEGES区别 SELECT允许用户查询表中的数据。 INSERT允许用户向表中插入新数据。 UPDATE允许用户更新表中的现有数据。 DELETE允许用户从表中删除数据。 这四个权限是数据库中最常用的权限通常足以满足大多数用户的日常操作需求。它们只影响数据的操作而不涉及数据库结构或系统级别的操作。ALL PRIVILEGES是一个更广泛的权限集合它不仅包括SELECT, INSERT, UPDATE, DELETE还包括以下权限 CREATE允许用户创建新的数据库、表、索引等。 DROP允许用户删除数据库、表、索引等。 ALTER允许用户修改表结构如添加或删除列。 INDEX允许用户创建和删除索引。 GRANT OPTION允许用户将自己拥有的权限授予其他用户。 REFERENCES允许用户创建外键约束。 CREATE VIEW允许用户创建视图。 SHOW VIEW允许用户查看视图的定义。 CREATE ROUTINE允许用户创建存储过程和函数。 ALTER ROUTINE允许用户修改存储过程和函数。 EXECUTE允许用户执行存储过程和函数。 FILE允许用户读取和写入文件例如通过LOAD DATA INFILE和SELECT … INTO OUTFILE。 RELOAD允许用户执行FLUSH操作刷新服务器缓存。 SHUTDOWN允许用户关闭MySQL服务器。 PROCESS允许用户查看所有线程的状态。 SUPER允许用户执行一些管理操作如更改全局变量、杀死其他用户的线程、使用CHANGE MASTER TO等。 REPLICATION SLAVE允许用户从主服务器复制数据。 REPLICATION CLIENT允许用户获取主服务器和从服务器的状态信息。 撤销用户权限 REVOKE SELECT, INSERT ON employees FROM user1localhost;撤销所有权限 REVOKE ALL PRIVILEGES ON *.* FROM adminlocalhost;附用户相关操作语句 创建用户 CREATE USER user1localhost IDENTIFIED BY password123;修改用户密码 ALTER USER user1localhost IDENTIFIED BY new_password;删除用户 DROP USER user1localhost;重命名用户 RENAME USER user1localhost TO user2localhost;查看当前用户 SELECT CURRENT_USER();查看所有用户 SELECT User, Host FROM mysql.user;附角色管理Role Management 从MySQL 8.0开始MySQL引入了角色Role的概念允许你将一组权限分配给一个角色然后将该角色分配给多个用户。角色可以简化权限管理特别是在有大量用户和复杂权限需求的情况下。 创建角色 CREATE ROLE data_analyst;为角色分配权限 GRANT SELECT, INSERT, UPDATE ON mydatabase.* TO data_analyst;将角色分配给用户 GRANT data_analyst TO user1localhost;激活角色角色授权 SET DEFAULT ROLE data_analyst TO user1localhost;查看用户的角色 SHOW GRANTS FOR user1localhost;删除角色 DROP ROLE data_analyst;5、事务控制语言TCL TCL用于管理事务确保一组相关的数据库操作要么全部成功要么全部失败。事务的四个特性ACID保证了数据的一致性和可靠性。 常见的TCL操作包括 BEGIN/START TRANSACTION开始一个事务。COMMIT提交事务使所有更改永久生效。ROLLBACK回滚事务撤销所有未提交的更改。SAVEPOINT设置保存点允许部分回滚。 使用示例 开始事务 START TRANSACTION;提交事务 COMMIT;回滚事务 ROLLBACK;设置保存点 SAVEPOINT my_savepoint;回滚到保存点 ROLLBACK TO SAVEPOINT my_savepoint;释放保存点 RELEASE SAVEPOINT my_savepoint;6、SQL的高级功能 除了上述基本功能SQL还提供了许多高级功能用于处理复杂的数据操作和查询优化。以下是一些常见的高级SQL功能 1、窗口函数Window Functions 窗口函数Window Functions是SQL中一种强大的工具允许你在查询结果集中进行复杂的聚合计算而不需要使用子查询或自连接。窗口函数可以在每一行数据上应用聚合操作并且可以基于特定的分组、排序和范围来计算结果。MySQL从8.0版本开始支持窗口函数极大地增强了其处理复杂查询的能力。 窗口函数的语法结构 window_function([expression]) OVER ([PARTITION BY partition_expression][ORDER BY sort_expression][frame_clause] )说明: window_function指定要使用的窗口函数如ROW_NUMBER()、RANK()、SUM()、AVG()等。PARTITION BY将结果集划分为多个分区类似于GROUP BY每个分区独立计算窗口函数的结果。ORDER BY在每个分区内对行进行排序影响窗口函数的计算顺序。frame_clause定义窗口框架指定窗口函数作用的行范围可选。常见的框架类型包括 ROWS BETWEEN … AND …RANGE BETWEEN … AND … 窗口函数示例 窗口函数常用于在查询结果集中进行复杂的聚合计算而不需要使用子查询或自连接。 1、ROW_NUMBER() ROW_NUMBER()为每一行分配一个唯一的行号行号从1开始按ORDER BY指定的顺序递增。如果使用了PARTITION BY则每个分区内的行号从1开始重新计数。 示例为每个部门的员工分配行号 SELECT department, name, salary, ROW_NUMBER() OVER (PARTITION BY department ORDER BY salary DESC) AS row_num FROM employees;解释 PARTITION BY department按部门划分分区。ORDER BY salary DESC在每个部门内按工资降序排列。ROW_NUMBER()为每个部门的员工分配行号行号从1开始。 输出结果 2、RANK() RANK()为每一行分配一个排名排名从1开始按ORDER BY指定的顺序递增。如果有并列的行即相同的排序值它们会获得相同的排名后续行的排名会跳过相应的数字。 示例为每个部门的员工按工资排名 别名不要用关键字rank否则语法执行错误。 SELECT department, name, salary, RANK() OVER (PARTITION BY department ORDER BY salary DESC) AS rank1 FROM employees;解释 PARTITION BY department按部门划分分区。ORDER BY salary DESC在每个部门内按工资降序排列。RANK()为每个部门的员工按工资排名如果有并列的行排名会跳过。 输出结果 3、DENSE_RANK() DENSE_RANK()类似于RANK()但它不会跳过排名。即使有并列的行后续行的排名也不会跳过。在上面的RANK示例中我们看到排名为1,2,2,4没有第3名而DENSE_RANK()则会展示出第3名。 示例为每个部门的员工按工资排名不跳过 别名不要用关键字dense_rank否则语法执行错误。 SELECT department, name, salary, DENSE_RANK() OVER (PARTITION BY department ORDER BY salary DESC) AS dense_rank1 FROM employees;解释 PARTITION BY department按部门划分分区。ORDER BY salary DESC在每个部门内按工资降序排列。DENSE_RANK()为每个部门的员工按工资排名即使有并列的行排名也不会跳过。 输出结果 4、NTILE(n) NTILE(n)将结果集划分为n个桶或分组并为每一行分配一个桶编号。桶的大小尽可能均匀分布。 示例将员工按工资分为4个等级 SELECT name, salary, NTILE(4) OVER (ORDER BY salary DESC) AS salary_grade FROM employees;解释 ORDER BY salary DESC按工资降序排列。NTILE(4)将员工按工资分为4个等级每个等级分配一个桶编号。 输出结果 5、LAG()和LEAD() LAG()和LEAD()用于访问当前行之前的行或之后的行的数据。LAG()访问前一行LEAD()访问后一行。你可以指定偏移量默认为1并提供默认值当没有前/后行时返回。 示例比较员工与其前一名员工的工资差额 SELECT name, salary, LAG(salary, 1, 0) OVER (ORDER BY salary DESC) AS prev_salary,salary - LAG(salary, 1, 0) OVER (ORDER BY salary DESC) AS salary_diff FROM employees;解释 LAG(salary, 1, 0)获取前一行的工资如果没有前一行则返回0。salary - LAG(salary, 1, 0)计算当前行与前一行的工资差额。 输出结果 6、FIRST_VALUE()和LAST_VALUE() FIRST_VALUE()返回窗口中第一个值LAST_VALUE()返回窗口中最后一个值。你可以通过ORDER BY控制窗口中的排序顺序。 示例获取每个部门中最高和最低工资的员工 SELECT department, name, salary, FIRST_VALUE(salary) OVER (PARTITION BY department ORDER BY salary DESC) AS highest_salary,LAST_VALUE(salary) OVER (PARTITION BY department ORDER BY salary DESC RANGE BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING) AS lowest_salary FROM employees;解释 FIRST_VALUE(salary)获取每个部门中工资最高的员工的工资。LAST_VALUE(salary)获取每个部门中工资最低的员工的工资。为了确保LAST_VALUE()返回最后一个值我们使RANGE BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING 来定义窗口框架。 窗口框架常用范围说明UNBOUNDED PRECEDING表示从窗口的最开始第一行。UNBOUNDED FOLLOWING表示到窗口的最后最后一行。CURRENT ROW表示当前行。n PRECEDING 或 n FOLLOWING表示从前/后n行开始或结束。 输出结果 7、SUM()、AVG()、MIN()、MAX() 这些聚合函数也可以作为窗口函数使用允许你在每个分区或整个结果集中进行聚合计算而不需要使用GROUP BY。 示例计算每个部门的累计工资 SELECT department, name, salary, SUM(salary) OVER (PARTITION BY department ORDER BY salary DESC) AS cumulative_salary FROM employees;解释 SUM(salary)计算每个部门的累计工资。PARTITION BY department按部门划分分区。ORDER BY salary DESC在每个部门内按工资降序排列确保累计工资按工资从高到低累加。 输出结果 以上示例展示了聚合函数在窗口函数中的使用。聚合函数也可以不使用窗口函数直接使用。 示例求出每个部门的工资总和 SELECTdepartment,SUM(salary) FROMemployees GROUP BYdepartment;运行结果 2、窗口框架Frame Clause 窗口框架允许你进一步控制窗口函数的作用范围。你可以指定窗口函数作用的行范围。 常用的框架类型包括 ROWS BETWEEN … AND …基于行数定义窗口框架。RANGE BETWEEN … AND …基于值的范围定义窗口框架。 1、ROWS BETWEEN ROWS BETWEEN基于行数定义窗口框架。你可以指定窗口函数作用的前几行或后几行。 示例计算每个员工及其前两行的平均工资 SELECT name, salary, AVG(salary) OVER (ORDER BY salary DESC ROWS BETWEEN 2 PRECEDING AND CURRENT ROW) AS avg_salary FROM employees;解释 ROWS BETWEEN 2 PRECEDING AND CURRENT ROW窗口框架范围为前2行到当前行。AVG(salary)计算当前行及其前两行的平均工资。 常用范围说明UNBOUNDED PRECEDING表示从窗口的最开始第一行。UNBOUNDED FOLLOWING表示到窗口的最后最后一行。CURRENT ROW表示当前行。n PRECEDING 或 n FOLLOWING表示从前/后n行开始或结束。 输出结果 2、RANGE BETWEEN RANGE BETWEEN基于值的范围定义窗口框架。它适用于数值类型的列窗口框架基于值的差异而不是行数。 示例计算每个员工及其工资相同或相差不超过5000的其他员工的平均工资 SELECT name, salary, AVG(salary) OVER (ORDER BY salary DESC RANGE BETWEEN 5000 PRECEDING AND 5000 FOLLOWING) AS avg_salary FROM employees;解释 RANGE BETWEEN 5000 PRECEDING AND 5000 FOLLOWING窗口框架包括当前行及其工资相差不超过5000的其他行。AVG(salary)计算当前行及其工资相差不超过5000的其他行的平均工资。 输出结果 如果只是和高于自己最高5000的工资一起求平均值如下 窗口函数总结 窗口函数是MySQL 8.0及更高版本中非常强大的功能能够让你在查询结果集中进行复杂的聚合计算而不需要使用子查询或自连接。 常见的窗口函数包括 ROW_NUMBER()为每一行分配唯一的行号。RANK()和DENSE_RANK()为每一行分配排名。NTILE(n)将结果集划分为n个桶。LAG()和LEAD()访问前一行或后一行的数据。FIRST_VALUE()和LAST_VALUE()获取窗口中的第一个或最后一个值。SUM()、AVG()、MIN()、MAX()在窗口中进行聚合计算。 此外窗口框架ROWS BETWEEN和RANGE BETWEEN允许你进一步控制窗口函数的作用范围使你能够更灵活地定义计算的上下文。 3、公用表表达式CTE 用于将复杂的查询分解为多个简单的步骤提高可读性和维护性。CTE可以递归使用适用于处理层次结构数据如组织结构图、树形结构等。 示例 WITH RECURSIVE org_tree AS (SELECT id, name, manager_idFROM employeesWHERE manager_id IS NULLUNION ALLSELECT e.id, e.name, e.manager_idFROM employees eINNER JOIN org_tree ot ON e.manager_id ot.id)SELECT * FROM org_tree;运行结果 4、临时表Temporary Tables 用于存储中间结果避免重复计算。临时表只在当前会话中可见会话结束后自动删除。 示例创建一个临时表并使用临时表 CREATE TEMPORARY TABLE temp_employees ASSELECT * FROM employees WHERE department HR; select * from temp_employees;运行结果 5、索引Indexes 用于加速查询操作特别是在大表上。索引可以显著提高查询性能但也会影响插入、更新和删除操作的速度。常见的索引类型包括B-tree索引、哈希索引、全文索引等。 创建索引示例 CREATE INDEX idx_name ON employees (name);6、视图Views 用于创建虚拟表封装复杂的查询逻辑。视图可以简化查询隐藏底层表的复杂性并提供数据抽象。 示例 CREATE VIEW hr_employees ASSELECT * FROM employees WHERE department HR;7、存储过程Stored Procedures 用于封装一组SQL语句作为可复用的代码块。存储过程可以接受参数、执行复杂的业务逻辑并返回结果。 示例创建一个存储过程指定id查询对应的数据 DELIMITER //CREATE PROCEDURE get_employee_by_id(IN emp_id INT)BEGINSELECT * FROM employees WHERE id emp_id;END //DELIMITER ;解释 DELIMITER //更改MySQL的语句分隔符为//。默认情况下MySQL使用分号;作为语句的结束符。然而在创建存储过程时存储过程体内部可能包含多个SQL语句每个语句以分号结束。为了避免MySQL将这些内部的分号误认为是整个存储过程定义的结束我们需要临时更改分隔符。这样MySQL会将整个存储过程定义视为一个完整的语句直到遇到//才执行。CREATE PROCEDURE get_employee_by_id(IN emp_id INT)创建一个名称为get_employee_by_id的存储过程。定义了一个输入参数emp_id类型为INT。IN表示这是一个输入参数即调用存储过程时需要传递的值。emp_id是你要查询的员工ID。BEGIN和END用于包裹存储过程的主体部分。在BEGIN和END之间的所有SQL语句都属于该存储过程的逻辑。本例中存储过程体只包含一条SELECT语句用于从employees表中查询与emp_id匹配的员工信息。DELIMITER ; :将分隔符恢复为默认的分号;。这一步是为了确保后续的SQL语句使用默认的分隔符。 运行结果 调用存储过程示例 CALL get_employee_by_id(10001);8、触发器Triggers 用于在特定事件发生时自动执行一组SQL语句。触发器通常用于实现数据完整性约束、审计日志记录等功能。 示例创建触发器校验employees表新增的数据age小于18岁时提示报错 CREATE TRIGGER before_insert_employeeBEFORE INSERT ON employeesFOR EACH ROWBEGINIF NEW.age 18 THENSIGNAL SQLSTATE 45000 SET MESSAGE_TEXT Employee must be at least 18 years old;END IF;END;解释 CREATE TRIGGER before_insert_employee创建一个名称为before_insert_employee的触发器。BEFORE INSERT ON employees指定触发器的执行时机。在employees表执行Insert语句之前触发。FOR EACH ROW指定触发器的执行粒度。FOR EACH ROW表示触发器会为每一行插入操作单独执行一次。也就是说如果你一次性插入多条记录触发器会为每一条记录分别检查条件。BEGIN和END用于包裹触发器的主体部分。在BEGIN和END之间的所有逻辑都属于该触发器的执行内容。在这个例子中触发器体包含一个IF语句用于检查新插入的员工年龄是否小于18岁。如果条件成立则抛出一个错误阻止插入操作。IF NEW.age 18 THEN在触发器中NEW是一个特殊的关键字表示即将插入的新记录。它允许你在触发器中访问新记录的各个字段值。如果IF条件成立即NEW.age 18则执行THEN后面的逻辑。SIGNAL SQLSTATE ‘45000’ SET MESSAGE_TEXT ‘Employee must be at least 18 years old’; : SIGNAL语句可以让你在触发器或存储过程中显式地抛出错误从而中断当前的操作。45000是MySQL中的一个通用错误代码表示“未分类的SQL状态”unclassified SQL state。你可以使用这个代码来抛出自定义的错误。SET MESSAGE_TEXT Employee must be at least 18 years old’设置错误消息的内容。当触发器抛出错误时MySQL会返回这条消息给客户端告知用户具体的错误原因。END IF;结束IF语句的逻辑块。如果没有抛出错误触发器将继续执行后续的逻辑如果有。 执行结果 验证触发器功能 INSERT INTO employees VALUES (10009, Alice, 16, HR, 70000, NULL)7、SQL的优化技巧 为了提高SQL查询的性能以下是几种常见的优化技巧 使用索引为经常用于查询条件的列创建索引以加速查询操作。避免在频繁更新的列上创建索引因为索引会增加写操作的开销。避免全表扫描尽量使用索引覆盖查询确保查询只访问必要的数据。避免使用 SELECT *只选择需要的列。合理使用JOIN尽量减少JOIN的数量避免不必要的连接。如果可能使用子查询代替复杂的JOIN。使用合适的数据类型选择合适的数据类型可以减少存储空间并提高查询性能。例如使用INT代替VARCHAR存储数字使用DATE代替VARCHAR存储日期。分页查询对于大数据集使用LIMIT和OFFSET进行分页查询避免一次性加载过多数据。也可以考虑使用键集分页Keyset Pagination来提高分页性能。使用缓存对于频繁执行的查询可以使用查询缓存如MySQL的查询缓存或应用层缓存来减少数据库的压力。分析查询计划使用EXPLAIN语句分析查询的执行计划找出潜在的性能瓶颈。根据分析结果调整查询语句或索引。 示例 EXPLAIN SELECT * FROM employees WHERE department HR;8、SQL总结 SQL是一种强大且灵活的查询语言广泛应用于关系型数据库的管理和操作。通过掌握SQL的各个组成部分DDL、DML、DQL、DCL 和 TCL你可以有效地创建、修改、查询和管理数据库中的数据。此外SQL 还提供了许多高级功能如窗口函数、CTE、索引、视图等帮助你处理复杂的业务需求和优化查询性能。 仰天大笑出门去我辈岂是蓬蒿人
http://www.yingshimen.cn/news/110806/

相关文章:

  • c 网站开发教程 购物网站湖南建设监理协会网站
  • 蛋糕方案网站建设企业建立站点方案有几种
  • 梧州最权威的综合性新闻门户网站河西网站建设开发
  • 沙田做网站wordpress网站手机端
  • 自建门户网站做租赁的行业网站
  • 南山网站建设公自学网ps教程新手入门
  • 蓟县网站建设wordpress智慧面板
  • 网站被k怎么金华做企业网站公司
  • 具有品牌的广州做网站新品牌推广方案
  • 集团公司做网站的好处有什么网页搜索栏怎么做
  • 那个网站系统好企业先做网站还是先做淘宝
  • 无锡网站制作楚天软件建筑工程劳务分包平台
  • 政协门户网站建设网站建设学生作业成品
  • 婚礼礼网站如何做的网站建设配图
  • mir设计公司官网百度seo提交
  • 网站外链收录很多 内链收录几个电脑怎么下载网页视频
  • 医疗类网站前置审批游戏制作要学什么专业
  • 公司换网站换域名 备案wordpress影视主题下载
  • 自建虚拟主机网站源码深圳大型互联网公司
  • 韶关网站建设石家庄市建设工程信息网
  • 东莞seo网站优化运营高端网站制作
  • 上市集团网站建设2022年最新血糖标准权威发布
  • 建设工程信息化考试报名网站网址大全百度
  • 北京 酒店 企业 网站建设网站建设公司 电话销售没什么效果
  • 网站建设和技术支持公网带宽1m能建设电商网站吗
  • 自贡网站建设公司合作网站登录制作
  • 网站设计与制作合同网站无法添加图片
  • 学校做网站需要多少钱京东商城在线网上购物
  • 中国工商做年报网站河南建筑信息平台
  • 六安市网站制作公司我wordpress top主题